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

AnatolySh

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

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

  • Посещение

Репутация

0 Обычный

2 Подписчика

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

  • Звание
    Местный
    Местный
  • День рождения 07.10.1974

Старые поля

  • skype
    Array
  • Facebook
    Array

Контакты

  • Сайт
    Array
  • ICQ
    Array
  • Skype
    Array

Информация

  • Город
    Array

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

3 932 просмотра профиля
  1. Смотря с каким ВЗПП. Где-то отдельный сервер надо ставить, а где-то набор утилиток, который ещё и напильником облагораживать, чтобы в удобоваримый roadmap привести. Правда, это не к ВЗПП вопросы а к КТЦ Электроники, но хрен редьки...
  2. Всем добра! Вопрос в теме, собственно.
  3. Да, спасибо: reg [23 : 0] count_v = 0; reg c_out_v = 0; привело в соответствие. Откуда тогда я мог помнить о необходимости сброса всего и вся в начале работы?
  4. Всем добра. Уверен, что давно уже обсуждено много раз, но снова прошу меня направить в нужное русло. Вспоминаю, что при моделировании (и, возможно, не только) необходимо принудительно устанавливать все триггеры проекта в заранее определённое состояние. Берём модуль на VHDL library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity n_f0 is Port ( clk : in std_logic; n : in integer range 0 to 2 ** 24 - 1; clk_out : out std_logic ); end n_f0; architecture Behavioral of n_f0 is signal count : unsigned (23 downto 0) := (others => '0'); signal c_out : std_logic := '0'; begin report_proc: process begin report "Invoked n_f0.vhd"; wait; end process report_proc; clk_proc : process (clk) begin if rising_edge(clk) then count <= count + to_unsigned(n,24); c_out <= count(23); clk_out <= '1' when count(23) = '1' and c_out = '0' else '0'; end if; end process clk_proc; end Behavioral; и его реинкарнацию на Verilog module n_f0 ( input clk, // input clk input [23 : 0] n, // divider output reg clk_out // output ); initial $display("Invoked n_f0.v"); reg [23 : 0] count_v; reg c_out_v; wire count_v_msb; assign count_v_msb = count_v [23]; always @ ( posedge clk ) begin count_v <= count_v + n; c_out_v <= count_v_msb; clk_out <= count_v_msb && !c_out_v; end endmodule С testnbench module n_f0_tb; logic clk; logic [23 : 0] n; wire clk_out; n_f0 n_f0_inst ( .clk ( clk ), .n ( n ), .clk_out ( clk_out ) ); initial $display("Invoked n_f0_tb.sv"); initial n = 2 ** 22; initial begin clk = 1'b0; forever # 8ns clk = ~clk; // 125MHz end endmodule : n_f0_tb Моделирование VHDL варианта даёт Т.е. всё работает (clk_out), а, вот, verilog вариант молчит. Уверен на 100%, что дело в сбросе, но почему, скажите, VHDL вариант катит? Установки симулятора, стандарт или что-то иное?
  5. Согласен. Не моё. Согласен. Моё. Спасибо. Исправлюсь. Руки (пока) прошу не рубить.
  6. И снова здравствуйте. Пока родил вот что: package adc_shum_zashita_pkg; timeunit 100ps; timeprecision 100ps; parameter CLK_PRD = 8ns; // 125MHz parameter RST_SET_TIME = 20ns; parameter RST_DUR_TIME = 10ns; parameter CNT_PULSE_DIM = 8; typedef logic [CNT_PULSE_DIM - 1 : 0] cnt_pulse_t; parameter MAX_DELAY = 20; parameter PAUSE_DELAY = 20; endpackage : adc_shum_zashita_pkg и import adc_shum_zashita_pkg::*; module adc_shum_zashita_tb; logic clk; logic rst; logic a; logic a_out; initial $display("Started adc_shum_zashita_tb.sv"); adc_shum_zashita adc_shum_zashita_inst (.*); initial begin clk = 1'b0; forever # ( CLK_PRD / 2 ) clk = ~clk; end cnt_pulse_t i; initial begin @(posedge clk); for (i = 0; i < MAX_DELAY; i++) begin a = 1'b1; repeat(i) @(posedge clk); a = 1'b0; repeat(PAUSE_DELAY) @(posedge clk); end end initial begin rst = 0; #RST_SET_TIME rst = 1; #RST_DUR_TIME rst = 0; end endmodule : adc_shum_zashita_tb думаю в сторону рандомизации, хотя не уверен, что она здесь нужна
  7. Какие параметры поиска задать, чтобы получить наиболее релевантные результаты? Ну или готов прошерстить форум (этот раздел, или искать и в трёх оставшихся "дружественных"?), дабы покончить, наконец-то с наследием прошлого, не достойного звания советского офицера. Где считаю нужным, писю, и уже давно Всё, я уже обильно посыпал голову пеплом и готов быть посланным в нужном направлении ))) Это - выход SPI ADC AD7680, управляемого (CS и CLK) от ПЛИС через LVDS TX -> LVDS RX -> OptoCouple ADuM640X, данные с которого по той же цепочке улетают обратно. Кто и как решил, что эти данные надо фильтровать и почему именно такую границу заложил - предстоит либо выяснить либо забить на это дело.
  8. Спасибо. Форум читаю нерегулярно, особенно сейчас, когда как и у вас работы выросло вдвое, но теперь сориентируюсь на переход к параметрам. Пакеты, как понимаю, это про VHDL?
  9. Прошу сказать, что не так с макросами и пнуть, как понимаю, в сторону параметров?
  10. Спасибо огромное, сделал так: `timescale 1ns / 1ns `define T1ns 1 // with respect to timeunit `define T1us ( 1000 * `T1ns ) `define T1ms ( 1000 * `T1us ) `define CLK_PRD ( 20 * `T1ns ) `define CNT_PULSE_DIM 8 `define CNT_PULSE_RNG [`CNT_PULSE_DIM - 1 : 0] `define MAX_DELAY `CNT_PULSE_DIM'd20 `define PAUSE_DELAY 10 module adc_shum_zashita_tb; logic clk; logic a; logic a_out; adc_shum_zashita adc_shum_zashita_inst ( .clk ( clk ), .a ( a ), .a_out ( a_out ) ); logic `CNT_PULSE_RNG cnt_pulse; initial begin clk = 1'b0; forever # ( `CLK_PRD / 2 ) clk = ~clk; end logic `CNT_PULSE_RNG i; initial begin @(posedge clk); for (i = 0; i < `MAX_DELAY; i++) begin a = 1'b1; repeat(i) @(posedge clk); a = 1'b0; repeat(`PAUSE_DELAY) @(posedge clk); end end initial begin forever @(negedge a_out) begin cnt_pulse = 0; $display("Pulse size (decimal) = %0d", i); end end initial forever @(posedge clk) cnt_pulse = a_out ? cnt_pulse + 1'b1 : cnt_pulse; endmodule : adc_shum_zashita_tb Что выдало в консоль # Pulse size (decimal) = x # Pulse size (decimal) = 8 # Pulse size (decimal) = 9 # Pulse size (decimal) = 10 # Pulse size (decimal) = 11 # Pulse size (decimal) = 12 # Pulse size (decimal) = 13 И отобразило Более чем доволен. Прошу простить, не упомянул в ТЗ частоту. Она там была, конечно что..
  11. Всем добра! Есть модуль, пропускающий через себя импульсы с длительностью больше определённой. Задача: написать testbench, подающий на вход модуля последовательно импульсы с нарастающей от единичной длительностью и проверяющий появление оных на выходе, дабы понять границу. Какие варианты существуют (SV tasks, SVA)? В общем, ткните носом, плиз.
  12. Очень сжатый вопрос. Если расширите, для чего это вам, м.б. ответ будет полнее и точнее? Загрузить куда?
  13. Если звёзды зажигают ... дальше понятно? Мне - да.
×
×
  • Создать...