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

kvv_spb

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о kvv_spb

  • Звание
    Участник
    Участник

Посетители профиля

1 210 просмотров профиля
  1. Смысла нет, убрал : case (avalon_addr[3][7:0]), правда результат тот-же
  2. Здравствуйте, помогите разобраться с обработкой 2d массива. Есть модуль, в котором присутствует такой текст: generate for ( i = 0; i <= kolvo_dev; i++ ) begin: outp_mem ram_dual_inner #(7) for_Si5368_read (.reset(bus_begin_conf.reset), .clk(bus_begin_conf.clk), .we(bus_begin_conf.readdatavalid_i2c && status_pkg[i]), .data(readdata_frm_i2c_modul), .write_addr(cnt_addr_st_work_read ), .read_addr(cnt_addrreg_for_write(address_latch[i][7:0])), .q(readdata_bmux[i])); end endgenerate это генерация 4-х модулей памяти, где: kolvo_dev = 3, address_latch,определён как: logic[31:0]address_latch[3:0] , cnt_addrreg_for_write это функция: function logic [7:0] cnt_addrreg_for_write(input [3:0][7:0]avalon_addr); byte d_bus; d_bus ='0; begin if (avalon_addr[3:0] == 0) begin d_bus=avalon_addr[0][7:0]; case (d_bus[7:0]) 8'h01: cnt_addrreg_for_write = 8'b0000_0000; 8'h02: cnt_addrreg_for_write = 8'b0000_0001; 8'h05: cnt_addrreg_for_write = 8'b0000_0010; default: cnt_addrreg_for_write = 8'b1111_0000; endcase end else if (avalon_addr[3:0] == 1) begin d_bus=avalon_addr[1][7:0]; case (d_bus[7:0]) 8'h02: cnt_addrreg_for_write = 8'b0000_0000; 8'h09: cnt_addrreg_for_write = 8'b0000_0001; default: cnt_addrreg_for_write = 8'b1111_0000; endcase end else if (avalon_addr[3:0] == 2) begin d_bus=avalon_addr[2][7:0]; case (d_bus[7:0]) 8'h09: cnt_addrreg_for_write = 8'b0000_0001; 8'h12: cnt_addrreg_for_write = 8'b0000_0010; default: cnt_addrreg_for_write = 8'b1111_0000; endcase end else if (avalon_addr[3:0] == 3) begin d_bus=avalon_addr[3][7:0]; case (d_bus[7:0]) 8'haa: cnt_addrreg_for_write = 8'b0000_0011; default: cnt_addrreg_for_write = 8'b1111_0000; endcase end else cnt_addrreg_for_write = 8'b1111_0011; end endfunction в этой функции и есть проблема, не возвращает она нужные значения. Скажите где ошибка, или как правильно написать.
  3. поиск начинается когда BB станет равным '0'- это единственное условие Да я собственно и пробегаю for-ом , и break далаю только тогда когда "победитель" отсутствует, и цикл пробегаю заново
  4. Да это про FPGA. И вы совершенно правы: "... речь идет о памяти" , а эти сигналы BB это так сказать статус: т.е. заполнина или нет память. только память я реализую на логике (DFF), а не на внутренней памяти. 1такт = 1clock.
  5. Спасибо за ответ. Естественно clock есть, в том примере что вы описали значения State перещёлкиваются по счётчику 0,1,2,3,....2^8-1, мне же надо 0,1,2...deepMemBuff или 0,1,0,1,2... или 0,0... всё зависит от того как будут установливатся BB За один такт мне нужно посмотреть все значения от 0 до deepMemBuff , остановится на первом не нулевом, и сидеть в нём пока это значение равно 1, далее когда BB=0, всё повторить...
  6. Здравствуйте, есть код: begin :interrupt for (i = 0; i < deepMemBuff + 1; i = i+1) begin if (!BB[i]) disable interrupt; begin aa<=i; end end end работает так: , а хочется чтобы было так : Описание: Скажем BB[0] =1 следовательно в этом состаянии мы находимся до тех пор пока BB[0] =1, после того как BB[0] =0 переходим на BB[1], если BB[1]=1 то в этом состаянии мы находимся до тех пор пока BB[1] =1 и так далее... до deepMemBuff +1. Помогите написать так как в Описании.
  7. чего-то не получется. Задаю файл с параметром и пытаюсь его `include в другой файл соответственно. Quartus 8.0 пишет: если поставить `include в самом начале файла (перед module ): ...нельзя декларировать больше 1-го раза если в тексте то говарит что то вроде этого : Error (10170): Verilog HDL syntax error at cons.v(3) near text "module"; expecting ";", or ":", or "@", or "end", or an identifier ("module" is a reserved keyword ), or a system task, or "{", or a sequential statement --это ругать на файл с параметром.
  8. Спасибо получилось. но может есть варианты с: #(parameter
  9. Здравствуйте. Сразу прошу прощения за глупый вопрос, новичёк... Как мне передать константы другим модулям (другие файлы) в проекте? для примера кусок кода который нужно подправить... //файл с константами module constant #(parameter cons1=8); endmodule //файл куда нужно передать константу cons1 module shift_reg(clk,serial_data,parallel_data); input clk; input serial_data; output reg [7:0]parallel_data; always @ (posedge clk) parallel_data = {serial_data, parallel_data[[b]cons1[/b]-1:1]}; endmodule
  10. Здравствуйте, есть сигнал на FPGA (последовательность прямоугольных импульсов) с разной длительностью и разным периодом. Подскажите как можно вычислить постоянную составляющую данного сигнала.
  11. Добрый день, у меня похожая проблема как у автора темы. Только память используется для преобразования данных из byte в nibble. Соответственно память имеет вход для данных [7..0] а выход [3..0]. Как правильно описать чтобы размещение было не на логике, а в блоках памяти? library ieee; use ieee.std_logic_1164.all; use IEEE.std_logic_unsigned.all; entity ram_dual is port ( data : in std_logic_vector(7 downto 0); raddr : in std_logic_vector(3 downto 0); waddr : in std_logic_vector(2 downto 0); we : in std_logic := '1'; re : in std_logic := '1'; clk : in std_logic; q : out std_logic_vector(3 downto 0) ); end ram_dual; architecture rtl of ram_dual is attribute syn_ramstyle : string; attribute syn_ramstyle of rtl : architecture is "M-RAM"; -- Build a 2-D array type for the RAM subtype word is std_logic_vector(7 downto 0); subtype nibble is std_logic_vector(3 downto 0); type mem_A is array(8 downto 0) of word; type mem_B is array(15 downto 0) of nibble; -- Declare the RAM signal. signal ram_A : mem_A; signal ram_B : mem_B; shared variable j: integer RANGE 0 TO 15; begin process(clk) begin if(rising_edge(clk)) then if(we = '1') then ram_A(CONV_INTEGER (waddr)) <= data; end if; end if; end process; process(clk) begin if rising_edge(clk) then --j:=0; for i in 0 to 7 loop for k in 0 to 1 loop if k = 0 then ram_B(j)<=ram_A(i)(7 downto 4); else ram_B(j)<=ram_A(i)(3 downto 0); end if; j:=j+1; end loop; end loop; if (re = '1') then q(3 downto 0) <= ram_B(CONV_INTEGER(raddr)); end if; end if; end process; end rtl;
×
×
  • Создать...