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

Передача данных по USB

Подскажите пожалуйста! Обучаюсь на отладочной плате 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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 hours ago, Maverick_ said:

Какая плата? Можно ссылку на описание

да ладно бы плата, мне интересно на какой корке возможна вот такая передача) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала оставьте только одно значение - константу и все время ее посылайте. 

Каким образом ваша плата стыкуется с юсб портом компьютера? Давайте временные диаграммы данного ftdi чипа с мануала.  Насколько я помню у данных микросхем надо дергать порты rxf, Rd, data( прием данных) и txe, we, data (передача данных)

Второй вопрос, как вы принимаете данные в компьютере, какие ftdi драйвера используете, команды?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Судя по приведённому 'коду' передача по USB происходит чисто телепатически. Ибо, как правльно заметил Skryppy для общения с FTDI чипом одной шины данных недостаточно (я уже не говорю, что общение с ней на тактовой частоте FPGA и без всякой синхронизации вообще приведёт к букету глюков чудных)

Про Verilog RTL вообще молчу, (мат здесь вроде не приветствуется) :crazy:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка.

Изменено пользователем Strob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, Strob said:

Ну и, кстати, в блоке always сплошные блокирующие присвоения, оно так работать то вообще должно? Плюс в условии ошибка.

Это конечно ошибка, но на результат синтеза не повлияет. А вот при моделировании будет чёрт и что - это другой вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, Nick_K сказал:

на результат синтеза не повлияет. 

:shok:

Согласен со Strob, нельзя так писать, это не компьютерная программа.

Flip,  оператор инкремента i введите в конструкцию else, оператор присвоения также поместите в if - else (продублировав и учитывая, что  bufs[16] не существует).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Nick_K сказал:

А вот при моделировании будет чёрт и что - это другой вопрос.

А с чего вы взяли, что при моделировании будет что-то не так? Там сплошные блокирующие присваивания друг за другом, поэтому всё однозначно.

Но, конечно, так писать не надо. Не «нельзя», а «не надо».

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Коллеги, позвольте нубский вопрос.

У ТС простой счётчик 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-разрядная.

Или это при синтезе автоматически учитывается Квартусом и переменная усекается до младших разрядов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, MrGalaxy said:

У ТС простой счётчик i на 4 разряда, я в таких случаях обхожусь без if:

При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно.

Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы.

Изменено пользователем Strob

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, MrGalaxy сказал:

я в таких случаях

Если переменная используется в одном процессе, то зачем она shared? Если в нескольких, то зачем переменная для простых сигналов? Приключений хотите?

2 часа назад, MrGalaxy сказал:

обхожусь без if

Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 минут назад, andrew_b сказал:

 

Странно. У вас что происходит, если i = 15, а i + 1 = 16 и мы выходим за границы диапазона? Тут должна возникать ошибка. Без if не обойтись.

На самом деле ошибки здесь нет, при переполнении счётчика он автоматически сбрасывается в ноль.

15 + 1 = 0

Это, кстати, и в чистом программировании работает.

1 час назад, Strob сказал:

При поведенческой симуляции, ISim, по крайней мере раньше, range не учитывал. Соответственно счетчик продолжал считать и после 15. Но в железе счетчик урезался и считало правильно.

Это я про vhdl и xilinx ise. Имейте ввиду что подобная небрежность в коде рано или поздно может создать проблемы.

При симуляции тоже всё правильно считается (пользуюсь встроенным квартусовским). 

Это не небрежность. Впрочем, даже если поставить явное условие сброса счётчика, вопрос остаётся: в Верилоге разрядность переменной можно указывать или нет?

51 минуту назад, andrew_b сказал:

 Если в нескольких, то зачем переменная для простых сигналов? 

Загадками говорите... Затем, что используется только внутри блока и наружу не выводится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, MrGalaxy said:

в Верилоге разрядность переменной можно указывать или нет?

Есть типы с предопределенной длиной. Впрочем они могут быть оптимизированы системой. Если использовать например тип reg, можно задать произвольную разрядность.

Это небрежность в том смысле, что если завтра Вам придется писать под спартан 6, можно на ровном месте схлопотать проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...