Flip 0 28 декабря, 2019 Опубликовано 28 декабря, 2019 · Жалоба Подскажите пожалуйста! Обучаюсь на отладочной плате 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 28 декабря, 2019 Опубликовано 28 декабря, 2019 · Жалоба Какая плата? Можно ссылку на описание Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 29 декабря, 2019 Опубликовано 29 декабря, 2019 · Жалоба 6 hours ago, Maverick_ said: Какая плата? Можно ссылку на описание да ладно бы плата, мне интересно на какой корке возможна вот такая передача) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dtmf73 5 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Это не корка - это FTDI chip. FIFO - USB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Skryppy 1 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Для начала оставьте только одно значение - константу и все время ее посылайте. Каким образом ваша плата стыкуется с юсб портом компьютера? Давайте временные диаграммы данного ftdi чипа с мануала. Насколько я помню у данных микросхем надо дергать порты rxf, Rd, data( прием данных) и txe, we, data (передача данных) Второй вопрос, как вы принимаете данные в компьютере, какие ftdi драйвера используете, команды? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 30 декабря, 2019 Опубликовано 30 декабря, 2019 · Жалоба Судя по приведённому 'коду' передача по USB происходит чисто телепатически. Ибо, как правльно заметил Skryppy для общения с FTDI чипом одной шины данных недостаточно (я уже не говорю, что общение с ней на тактовой частоте FPGA и без всякой синхронизации вообще приведёт к букету глюков чудных) Про Verilog RTL вообще молчу, (мат здесь вроде не приветствуется) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 30 декабря, 2019 Опубликовано 30 декабря, 2019 (изменено) · Жалоба Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка. Изменено 30 декабря, 2019 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 13 hours ago, Strob said: Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка. Это конечно ошибка, но на результат синтеза не повлияет. А вот при моделировании будет чёрт и что - это другой вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 22 минуты назад, Nick_K сказал: на результат синтеза не повлияет. Согласен со Strob, нельзя так писать, это не компьютерная программа. Flip, оператор инкремента i введите в конструкцию else, оператор присвоения также поместите в if - else (продублировав и учитывая, что bufs[16] не существует). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 1 час назад, Nick_K сказал: А вот при моделировании будет чёрт и что - это другой вопрос. А с чего вы взяли, что при моделировании будет что-то не так? Там сплошные блокирующие присваивания друг за другом, поэтому всё однозначно. Но, конечно, так писать не надо. Не «нельзя», а «не надо». Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба Коллеги, позвольте нубский вопрос. У ТС простой счётчик 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-разрядная. Или это при синтезе автоматически учитывается Квартусом и переменная усекается до младших разрядов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 31 декабря, 2019 Опубликовано 31 декабря, 2019 (изменено) · Жалоба 1 hour ago, MrGalaxy said: У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if: При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно. Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы. Изменено 31 декабря, 2019 пользователем Strob Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 1 час назад, MrGalaxy сказал: я в таких случаях Если переменная используется в одном процессе, то зачем она shared? Если в нескольких, то зачем переменная для простых сигналов? Приключений хотите? 2 часа назад, MrGalaxy сказал: обхожусь без if Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 38 минут назад, andrew_b сказал: Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись. На самом деле ошибки здесь нет, при переполнении счётчика он автоматически сбрасывается в ноль. 15 + 1 = 0 Это, кстати, и в чистом программировании работает. 1 час назад, Strob сказал: При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно. Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы. При симуляции тоже всё правильно считается (пользуюсь встроенным квартусовским). Это не небрежность. Впрочем, даже если поставить явное условие сброса счётчика, вопрос остаётся: в Верилоге разрядность переменной можно указывать или нет? 51 минуту назад, andrew_b сказал: Если в нескольких, то зачем переменная для простых сигналов? Загадками говорите... Затем, что используется только внутри блока и наружу не выводится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 31 декабря, 2019 Опубликовано 31 декабря, 2019 · Жалоба 12 minutes ago, MrGalaxy said: в Верилоге разрядность переменной можно указывать или нет? Есть типы с предопределенной длиной. Впрочем они могут быть оптимизированы системой. Если использовать например тип reg, можно задать произвольную разрядность. Это небрежность в том смысле, что если завтра Вам придется писать под спартан 6, можно на ровном месте схлопотать проблем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться