Flip 0 December 28, 2019 Posted December 28, 2019 · Report post Подскажите пожалуйста! Обучаюсь на отладочной плате Altera. Задача следующая: нужно передавать постоянно данные по USB-порту, вроде написал программу, но передача данных не происходит. module bufer_forusb (Clk,f_data); input Clk; output [7:0] f_data; reg [7:0] bufs [0:15]; integer i; reg [7:0] f_data; initial begin i = 0; bufs[0] = 0; bufs[1] = 16; bufs[2] = 31; bufs[3] = 45; bufs[4] = 58; bufs[5] = 67; bufs[6] = 74; bufs[7] = 77; bufs[8] = 74; bufs[9] = 68; bufs[10] = 67; bufs[11] = 45; bufs[12] = 31; bufs[13] = 25; bufs[14] = 15; bufs[15] = 0; end always@ (posedge(Clk)) begin f_data = bufs[i]; i = i + 1; if(i == 16) i = 0; end endmodule Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 December 28, 2019 Posted December 28, 2019 · Report post Какая плата? Можно ссылку на описание Quote Share this post Link to post Share on other sites More sharing options...
des00 27 December 29, 2019 Posted December 29, 2019 · Report post 6 hours ago, Maverick_ said: Какая плата? Можно ссылку на описание да ладно бы плата, мне интересно на какой корке возможна вот такая передача) Quote Share this post Link to post Share on other sites More sharing options...
dtmf73 7 December 30, 2019 Posted December 30, 2019 · Report post Это не корка - это FTDI chip. FIFO - USB Quote Share this post Link to post Share on other sites More sharing options...
Skryppy 1 December 30, 2019 Posted December 30, 2019 · Report post Для начала оставьте только одно значение - константу и все время ее посылайте. Каким образом ваша плата стыкуется с юсб портом компьютера? Давайте временные диаграммы данного ftdi чипа с мануала. Насколько я помню у данных микросхем надо дергать порты rxf, Rd, data( прием данных) и txe, we, data (передача данных) Второй вопрос, как вы принимаете данные в компьютере, какие ftdi драйвера используете, команды? Quote Share this post Link to post Share on other sites More sharing options...
xvr 12 December 30, 2019 Posted December 30, 2019 · Report post Судя по приведённому 'коду' передача по USB происходит чисто телепатически. Ибо, как правльно заметил Skryppy для общения с FTDI чипом одной шины данных недостаточно (я уже не говорю, что общение с ней на тактовой частоте FPGA и без всякой синхронизации вообще приведёт к букету глюков чудных) Про Verilog RTL вообще молчу, (мат здесь вроде не приветствуется) Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 December 30, 2019 Posted December 30, 2019 (edited) · Report post Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка. Edited December 30, 2019 by Strob Quote Share this post Link to post Share on other sites More sharing options...
Nick_K 0 December 31, 2019 Posted December 31, 2019 · Report post 13 hours ago, Strob said: Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка. Это конечно ошибка, но на результат синтеза не повлияет. А вот при моделировании будет чёрт и что - это другой вопрос. Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 December 31, 2019 Posted December 31, 2019 · Report post 22 минуты назад, Nick_K сказал: на результат синтеза не повлияет. Согласен со Strob, нельзя так писать, это не компьютерная программа. Flip, оператор инкремента i введите в конструкцию else, оператор присвоения также поместите в if - else (продублировав и учитывая, что bufs[16] не существует). Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 30 December 31, 2019 Posted December 31, 2019 · Report post 1 час назад, Nick_K сказал: А вот при моделировании будет чёрт и что - это другой вопрос. А с чего вы взяли, что при моделировании будет что-то не так? Там сплошные блокирующие присваивания друг за другом, поэтому всё однозначно. Но, конечно, так писать не надо. Не «нельзя», а «не надо». Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 December 31, 2019 Posted December 31, 2019 · Report post Коллеги, позвольте нубский вопрос. У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if: Спойлер ... Shared variable i : integer range 0 to 15; ... Process(clk) begin if(Clk'event)and(Clk='1') then i := i + 1; end if; end process; ... На Верилоге такое возможно? Посмотрел учебник, там переменная может быть только integer 32-разрядная. Или это при синтезе автоматически учитывается Квартусом и переменная усекается до младших разрядов? Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 December 31, 2019 Posted December 31, 2019 (edited) · Report post 1 hour ago, MrGalaxy said: У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if: При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно. Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы. Edited December 31, 2019 by Strob Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 30 December 31, 2019 Posted December 31, 2019 · Report post 1 час назад, MrGalaxy сказал: я в таких случаях Если переменная используется в одном процессе, то зачем она shared? Если в нескольких, то зачем переменная для простых сигналов? Приключений хотите? 2 часа назад, MrGalaxy сказал: обхожусь без if Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись. Quote Share this post Link to post Share on other sites More sharing options...
MrGalaxy 10 December 31, 2019 Posted December 31, 2019 · Report post 38 минут назад, andrew_b сказал: Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись. На самом деле ошибки здесь нет, при переполнении счётчика он автоматически сбрасывается в ноль. 15 + 1 = 0 Это, кстати, и в чистом программировании работает. 1 час назад, Strob сказал: При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно. Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы. При симуляции тоже всё правильно считается (пользуюсь встроенным квартусовским). Это не небрежность. Впрочем, даже если поставить явное условие сброса счётчика, вопрос остаётся: в Верилоге разрядность переменной можно указывать или нет? 51 минуту назад, andrew_b сказал: Если в нескольких, то зачем переменная для простых сигналов? Загадками говорите... Затем, что используется только внутри блока и наружу не выводится. Quote Share this post Link to post Share on other sites More sharing options...
Strob 0 December 31, 2019 Posted December 31, 2019 · Report post 12 minutes ago, MrGalaxy said: в Верилоге разрядность переменной можно указывать или нет? Есть типы с предопределенной длиной. Впрочем они могут быть оптимизированы системой. Если использовать например тип reg, можно задать произвольную разрядность. Это небрежность в том смысле, что если завтра Вам придется писать под спартан 6, можно на ровном месте схлопотать проблем. Quote Share this post Link to post Share on other sites More sharing options...