Перейти к содержанию
    

Maverick_

Модератор
  • Постов

    3 861
  • Зарегистрирован

Весь контент Maverick_


  1. Помогите перевести на VHDL, моя попытка увенчалась не удачей. Код взят из XAPP 209. К сожалению я Verilg не владею. ////////////////////////////////////////////////////////////////////////////// // // crc calculation // This VERILOG code was generated using CRCGEN.PL version 1.7 // Last Modified: 01/02/2002 // Options Used: // Module Name = crc32 // CRC Width = 16 // Data Width = 8 // CRC Init = 0 // Polynomial = [0 -> 16] // 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 // // Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY // WHATSOEVER AND XILINX SPECIFICALLY DISCLAIMS ANY // IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR // A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. // // Copyright (c) 2001,2002 Xilinx, Inc. All rights reserved. // // ////////////////////////////////////////////////////////////////////////////// module crc32 ( crc_reg, crc, d, calc, init, d_valid, clk, reset ); output [15:0] crc_reg; output [7:0] crc; input [7:0] d; input calc; input init; input d_valid; input clk; input reset; reg [15:0] crc_reg; reg [7:0] crc; ////////////////////////////////////////////////////////////////////////////// // Internal Signals ////////////////////////////////////////////////////////////////////////////// wire [15:0] next_crc; ////////////////////////////////////////////////////////////////////////////// // Infer CRC-16 registers // // The crc_reg register stores the CRC-16 value. // The crc register is the most significant 8 bits of the // CRC-16 value. // // Truth Table: // -----+---------+----------+---------------------------------------------- // calc | d_valid | crc_reg | crc // -----+---------+----------+---------------------------------------------- // 0 | 0 | crc_reg | crc // 0 | 1 | shift | bit-swapped, complimented msbyte of crc_reg // 1 | 0 | crc_reg | crc // 1 | 1 | next_crc | bit-swapped, complimented msbyte of next_crc // -----+---------+----------+---------------------------------------------- // ////////////////////////////////////////////////////////////////////////////// always @ (posedge clk or posedge reset) begin if (reset) begin crc_reg <= 16'h0000; crc <= 8'h00; end else if (init) begin crc_reg <= 16'h0000; crc <= 8'h00; end else if (calc & d_valid) begin crc_reg <= next_crc; crc <= ~{next_crc[8], next_crc[9], next_crc[10], next_crc[11], next_crc[12], next_crc[13], next_crc[14], next_crc[15]}; end else if (~calc & d_valid) begin crc_reg <= {crc_reg[7:0], 8'h00}; crc <= ~{crc_reg[0], crc_reg[1], crc_reg[2], crc_reg[3], crc_reg[4], crc_reg[5], crc_reg[6], crc_reg[7]}; end end ////////////////////////////////////////////////////////////////////////////// // CRC XOR equations ////////////////////////////////////////////////////////////////////////////// assign next_crc[0] = d[4] ^ d[0] ^ crc_reg[13] ^ crc_reg[9] ^ d[5] ^ d[1] ^ crc_reg[14] ^ crc_reg[10] ^ d[6] ^ d[2] ^ crc_reg[15] ^ crc_reg[11] ^ d[7] ^ d[3] ^ crc_reg[12] ^ crc_reg[8]; assign next_crc[1] = d[4] ^ d[0] ^ crc_reg[13] ^ crc_reg[9] ^ d[5] ^ d[1] ^ crc_reg[14] ^ crc_reg[10] ^ d[6] ^ d[2] ^ crc_reg[15] ^ crc_reg[11] ^ d[3] ^ crc_reg[12]; assign next_crc[2] = crc_reg[9] ^ d[6] ^ d[7] ^ crc_reg[8]; assign next_crc[3] = crc_reg[9] ^ d[5] ^ crc_reg[10] ^ d[6]; assign next_crc[4] = d[4] ^ d[5] ^ crc_reg[10] ^ crc_reg[11]; assign next_crc[5] = d[4] ^ crc_reg[11] ^ crc_reg[12] ^ d[3]; assign next_crc[6] = crc_reg[12] ^ crc_reg[13] ^ d[2] ^ d[3]; assign next_crc[7] = crc_reg[13] ^ d[1] ^ crc_reg[14] ^ d[2]; assign next_crc[8] = d[0] ^ d[1] ^ crc_reg[14] ^ crc_reg[15] ^ crc_reg[0]; assign next_crc[9] = d[0] ^ crc_reg[15] ^ crc_reg[1]; assign next_crc[10] = crc_reg[2]; assign next_crc[11] = crc_reg[3]; assign next_crc[12] = crc_reg[4]; assign next_crc[13] = crc_reg[5]; assign next_crc[14] = crc_reg[6]; assign next_crc[15] = d[4] ^ crc_reg[9] ^ d[5] ^ crc_reg[10] ^ d[6] ^ crc_reg[11] ^ d[7] ^ crc_reg[12] ^ d[0] ^ crc_reg[13] ^ d[1] ^ crc_reg[14] ^ d[2] ^ crc_reg[15] ^ crc_reg[7] ^ d[3] ^ crc_reg[8]; endmodule В приложении сам XAPP 209 в основном интересует коректный перевод только куска программы, остальное понятно always @ (posedge clk or posedge reset) begin if (reset) begin crc_reg <= 16'h0000; crc <= 8'h00; end else if (init) begin crc_reg <= 16'h0000; crc <= 8'h00; end else if (calc & d_valid) begin crc_reg <= next_crc; crc <= ~{next_crc[8], next_crc[9], next_crc[10], next_crc[11], next_crc[12], next_crc[13], next_crc[14], next_crc[15]}; end else if (~calc & d_valid) begin crc_reg <= {crc_reg[7:0], 8'h00}; crc <= ~{crc_reg[0], crc_reg[1], crc_reg[2], crc_reg[3], crc_reg[4], crc_reg[5], crc_reg[6], crc_reg[7]}; end end
  2. Добавлю http://www.infanata.org/2006/11/16/sapr_xi...li_edk_7li.html http://www.infanata.org/2006/10/19/proekti...em_na_vhdl.html http://www.infanata.org/2006/03/07/proekti...strojjstv..html З.Ы. Прошу прощения, если литература не в тему.
  3. Кое что про режим "Slave FIFO" написано тут http://www.efo.ru/doc/Cypress/Cypress.pl?2524
  4. :a14: Спасибо за информацию! К сожалению, я в ВУЗе не изучал. Сейчас пытаюсь осваивать МК(микропроцессоры и микроконтроллеры), чуть лучше ориентируюсь в ПЛИС (так как с ними приходится работать).
  5. Я Вам дал результаты тестирования для осуществления выбора микропроцессора (оценить быстродействие, занимаемые процессором ресурсы и так далее, так как в реальном проекте есть наверное временные ограничения и ограничения в выборе ПЛИС). Адаптации под разные типы ПЛИС не будет так как блочная память, если я не ошибаюсь, описывается по разному у разных производителей ПЛИС. Со всем остальным, если описан микропроцессор на универсальном языке (VHDL, Verilog), проблем не должно возникнуть.
  6. Не знаю может вот это http://www.compitech.ru/html.cgi/arhiv/05_05/stat_usb.htm
  7. Вопрос конечно интересный, тогда встречный вопрос для каких целей? Это сравнение и тест производительности процессоров разных производителей (от 2004 года). Ссылка на pdf файл http://electronix.ru/forum/index.php?act=A...st&id=18485
  8. Нужны статьи, книги, переводы, любая русскоязычная информация Чекунов Д. Практикум программиста USB-устройств. // Современная электроника. 2005. N1, 10, 9, 8. 2006. N 1, 2, 3, 4 http://chipnews.com.ua/ru/archive/articles/?rub_id=34 В общем все что касается работы, описания и программирования контроллера USB CY7C68013А компании Cypress. На форуме я уже нашел ссылку на статью http://www.efo.ru/doc/Cypress/Cypress.pl?2524 ОЧЕНЬ НАДО! Заранее благодарен! С УВАЖЕНИЕМ Maverick.
  9. Здесь с Вами полностью согласен :) Но есть маленькое но: его нужно программировать!
  10. нашел http://www.compitech.ru/html.cgi/arhiv/05_05/stat_usb.htm Мне кажется, что это хороший вариант.
  11. Названия ПО: Xilinx ISE; Quartus (Altera) и др. Про правильность кода: a) синтезатор создает схему по твоему описанию на Verilog (или VHDL), а результаты работы увидишь, когда промоделируешь ее на симуляторе (простыми словами увидишь циклограммы работы своего цифрового устройства). Значит код написан верно, если задумка совпала с действительностью! б) код не правильный, если синтезатор выдаст ошибку. Скачать ПО можно по http://www.xilinx.com/support/download/index.htm https://www.altera.com/support/software/dow...oad_center.html
  12. Ну не кто же не отменял же передачу данных по 8 бит в 2 этапа. :)
  13. Существуют ли качественные переходники USB <-> COM ? В гугли порылся накопал парочку, но говорят, что они глючные и не на всех компьютерах работают. Например http://www.compax.ru/2-12-1-2.html http://www.ankerplus.ru/index.php?action=P...=61&tek=250
  14. Мне кажется что использование FTDI проще так как его не надо программировать (правда теряем в скорости передачи). Как говорится включил и работает :) А если честно, то подобный вопрос поднимался на http://electronix.ru/forum/index.php?showt...=44301&st=0
  15. ИЗВИНИТЕ! Тогда я не знаю, чем я могу помочь.
  16. Что там сложного??? А эта http://www.infanata.org/2006/10/19/proekti...em_na_vhdl.html
  17. Ранее я тебе/Вам давал ссылку на форум на котором я уже выкладывал подобные модули различных фирм Altera Xilinx и др. в одном архиве с описанием работы, правда реализованные на языке VHDL :) Ссылка на архив: http://electronix.ru/forum/index.php?act=A...st&id=18520 Дополнительно почитай/почитайте эти (русский язык) книги по этим ссылкам рекомендую http://www.infanata.org/2006/04/20/proekti...v_ju_zotov.html http://www.infanata.org/2006/10/19/proekti...em_na_vhdl.html Для процессора пишется на языке С. Но для лучшего понимания почитай (на русском языке) :) http://www.infanata.org/2006/11/16/sapr_xi...li_edk_7li.html
  18. В FPGA пишется модуль, который реализовывает обмен на логическом уровне. :) Модуль пишется на языке VHDL или Verilog или разрабатывается в Shemathic Editor
  19. Для командного интерфейса можно использовать RS232. И с него лучше начинать так как он намного проще в понимании и в реализации в FPGA. Програм для работы с RS232 под Windows много в Интернете например на http://www.pcports.ru/Developing.php имеется библиотека для работы с ним. Если надо могу дать готовую программу, проверенную в работе :) ЗЫ Посмотри по форуму эти вопросы не однократно поднимались, и выкладывались готовые модули для ПЛИС (во всяком случае для UART точно) Посмотри здесь http://electronix.ru/forum/index.php?showforum=48 http://electronix.ru/forum/index.php?showforum=49 http://electronix.ru/forum/index.php?showtopic=44169
  20. Здраствуйте! Можете поделится каким образом Вы дорабатывали драйвер и в каком режиме CY7C68013A работает(bulk, изохрон, ...)? http://www.kernelchip.ru/WoodmanUSB.php http://www.ftdichip.com/
  21. Я просто взял пример из Language Templates -> VHDL -> Synthesis Construct -> Coding Examples -> Misc -> barrel shifter Пользуюсь Xilinx ISE 8.02.03
  22. Привет! -- A Sample 16-bit barrel shifter code -- This code can be cut and pasted to the design file -- directly. library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; use IEEE.std_logic_unsigned.all; use IEEE.numeric_std.all; entity BARREL_SHIFT is port( DIN : in std_logic_vector(15 downto 0); SHIFT_AMT : in std_logic_vector(3 downto 0); CLK, ENB : in std_logic; DOUT : out std_logic_vector (15 downto 0)); end BARREL_SHIFT; architecture RTL of BARREL_SHIFT is signal DIN_BIT, DOUT_BIT : bit_vector (15 downto 0); signal S_INT : integer; begin DIN_BIT <= to_bitvector(DIN); S_INT <= CONV_INTEGER(SHIFT_AMT); process(CLK) begin if(CLK' event and CLK='1') then if(ENB = '0') then DOUT <= DIN; else DOUT_BIT <= DIN_BIT ror S_INT; DOUT <= to_stdlogicvector(DOUT_BIT); end if; end if; end process; end RTL;
×
×
  • Создать...