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

Maverick_

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

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

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


  1. Спасибо, что показали ошибку/опечатку :)
  2. спасибо ReedCat! :a14: выкладываю код на VHDL, который является переводом с Verilog в коде есть комментарий(стоят вопросительные знаки -- код который я не смог перевести) Это касается строки crc_reg <= {crc_reg[7:0], 8'h00} Прошу проверить и исправить. Выложенный код даже синтезируется :) Но синтезатор пишет Width mismatch. <crc> has a width of 8 bits but assigned expression is 9-bit wide. Т.е. где-то не совпадение размеров шин library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity crc_modul is Port ( clk : in STD_LOGIC; rst : in STD_LOGIC; crc_reg_out : out STD_LOGIC_VECTOR (15 downto 0); crc_out : out STD_LOGIC_VECTOR (7 downto 0); calc : in STD_LOGIC; init : in STD_LOGIC; d_valid : in STD_LOGIC; d : in STD_LOGIC_VECTOR (7 downto 0)); end crc_modul; architecture Behavioral of crc_modul is signal crc_reg : STD_LOGIC_VECTOR (15 downto 0); signal crc : STD_LOGIC_VECTOR (7 downto 0); signal next_crc : STD_LOGIC_VECTOR (15 downto 0); begin process ( clk, rst) begin if rst = '1' then crc_reg <= (others => '0'); crc <= (others => '0'); elsif (clk'event and clk = '1') then if init = '1' then crc_reg <= (others => '0'); crc <= (others => '0'); end if; if (calc and d_valid) = '1' then crc_reg <= next_crc; crc <= not (next_crc(15 downto 8)); end if; if (not(calc) and d_valid) = '1' then --crc_reg <= ????; crc <= not (next_crc(8 downto 0)); end if; end if; crc_reg_out <= crc_reg; crc_out <= crc; end process; next_crc(0) <= d(4) xor d(0) xor crc_reg(13) xor crc_reg(9) xor d(5) xor d(1) xor crc_reg(14) xor crc_reg(10) xor d(6) xor d(2) xor crc_reg(15) xor crc_reg(11) xor d(7) xor d(3) xor crc_reg(12) xor crc_reg(8); next_crc(1) <= d(4) xor d(0) xor crc_reg(13) xor crc_reg(9) xor d(5) xor d(1) xor crc_reg(14) xor crc_reg(10) xor d(6) xor d(2) xor crc_reg(15) xor crc_reg(11) xor d(3) xor crc_reg(12); next_crc(2) <= crc_reg(9) xor d(6) xor d(7) xor crc_reg(8); next_crc(3) <= crc_reg(9) xor d(5) xor crc_reg(10) xor d(6); next_crc(4) <= d(4) xor d(5) xor crc_reg(10) xor crc_reg(11); next_crc(5) <= d(4) xor crc_reg(11) xor crc_reg(12) xor d(3); next_crc(6) <= crc_reg(12) xor crc_reg(13) xor d(2) xor d(3); next_crc(7) <= crc_reg(13) xor d(1) xor crc_reg(14) xor d(2); next_crc(8) <= d(0) xor d(1) xor crc_reg(14) xor crc_reg(15) xor crc_reg(0); next_crc(9) <= d(0) xor crc_reg(15) xor crc_reg(1); next_crc(10) <= crc_reg(2); next_crc(11) <= crc_reg(3); next_crc(12) <= crc_reg(4); next_crc(13) <= crc_reg(5); next_crc(14) <= crc_reg(6); next_crc(15) <= d(4) xor crc_reg(9) xor d(5) xor crc_reg(10) xor d(6) xor crc_reg(11) xor d(7) xor crc_reg(12) xor d(0) xor crc_reg(13) xor d(1) xor crc_reg(14) xor d(2) xor crc_reg(15) xor crc_reg(7) xor d(3) xor crc_reg(8); end Behavioral;
  3. Спасибо! Этот блок не содержит описания FSM, а просто if else, я так понимаю? и как понимать например if (reset) begin с чем сравнивается?
  4. Помогите перевести на 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
  5. Добавлю 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 З.Ы. Прошу прощения, если литература не в тему.
  6. Кое что про режим "Slave FIFO" написано тут http://www.efo.ru/doc/Cypress/Cypress.pl?2524
  7. :a14: Спасибо за информацию! К сожалению, я в ВУЗе не изучал. Сейчас пытаюсь осваивать МК(микропроцессоры и микроконтроллеры), чуть лучше ориентируюсь в ПЛИС (так как с ними приходится работать).
  8. Я Вам дал результаты тестирования для осуществления выбора микропроцессора (оценить быстродействие, занимаемые процессором ресурсы и так далее, так как в реальном проекте есть наверное временные ограничения и ограничения в выборе ПЛИС). Адаптации под разные типы ПЛИС не будет так как блочная память, если я не ошибаюсь, описывается по разному у разных производителей ПЛИС. Со всем остальным, если описан микропроцессор на универсальном языке (VHDL, Verilog), проблем не должно возникнуть.
  9. Не знаю может вот это http://www.compitech.ru/html.cgi/arhiv/05_05/stat_usb.htm
  10. Вопрос конечно интересный, тогда встречный вопрос для каких целей? Это сравнение и тест производительности процессоров разных производителей (от 2004 года). Ссылка на pdf файл http://electronix.ru/forum/index.php?act=A...st&id=18485
  11. Нужны статьи, книги, переводы, любая русскоязычная информация Чекунов Д. Практикум программиста 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.
  12. Здесь с Вами полностью согласен :) Но есть маленькое но: его нужно программировать!
  13. нашел http://www.compitech.ru/html.cgi/arhiv/05_05/stat_usb.htm Мне кажется, что это хороший вариант.
  14. Названия ПО: 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
  15. Ну не кто же не отменял же передачу данных по 8 бит в 2 этапа. :)
  16. Существуют ли качественные переходники USB <-> COM ? В гугли порылся накопал парочку, но говорят, что они глючные и не на всех компьютерах работают. Например http://www.compax.ru/2-12-1-2.html http://www.ankerplus.ru/index.php?action=P...=61&tek=250
  17. Мне кажется что использование FTDI проще так как его не надо программировать (правда теряем в скорости передачи). Как говорится включил и работает :) А если честно, то подобный вопрос поднимался на http://electronix.ru/forum/index.php?showt...=44301&st=0
  18. ИЗВИНИТЕ! Тогда я не знаю, чем я могу помочь.
  19. Что там сложного??? А эта http://www.infanata.org/2006/10/19/proekti...em_na_vhdl.html
  20. Ранее я тебе/Вам давал ссылку на форум на котором я уже выкладывал подобные модули различных фирм 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
  21. В FPGA пишется модуль, который реализовывает обмен на логическом уровне. :) Модуль пишется на языке VHDL или Verilog или разрабатывается в Shemathic Editor
  22. Для командного интерфейса можно использовать 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
  23. Здраствуйте! Можете поделится каким образом Вы дорабатывали драйвер и в каком режиме CY7C68013A работает(bulk, изохрон, ...)? http://www.kernelchip.ru/WoodmanUSB.php http://www.ftdichip.com/
×
×
  • Создать...