Jump to content

    

AnatolySh

Свой
  • Content Count

    148
  • Joined

  • Last visited

Community Reputation

0 Обычный

About AnatolySh

  • Rank
    Частый гость
  • Birthday 10/07/1974

Старые поля

  • skype
    Array
  • Facebook
    Array

Контакты

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

Информация

  • Город
    Array

Recent Profile Visitors

2758 profile views
  1. Попробовать можно, но код менять нельзя. Он уже поставлен на учёт. В любом случае, спасибо. Я вот, что попробовал: "расширил зону действия" force, в тестбенче: было initial begin #`FORSE_STATE_WR force KRUG_0.state_wr = 5; release KRUG_0.state_wr; end; стало initial begin #`FORSE_STATE_WR force KRUG_0.state_wr = 5; #`STATICPLL_GLB_HALF_PERIOD release KRUG_0.state_wr; end; чтобы её было хоть видно на времянке: Было так: Почему же ModelSim при отображении времянки показывает, что машина попадает в дефолтное состояние, а при отображении покрытия - нет?
  2. Извините, а где вас так "научили", что вы думаете, что форсить и форсировать - это одно и тоже? Я говорил в общем, а вы пытаетесь придраться к словам. Прочитайте все мои посты в этом треде, прежде чем высказываться не по-существу.
  3. Да, теперь понял: спасибо за пояснения.
  4. Да, но при компиляции ModelSim видит, какие именно выражения для индекса я присваиваю, и мог бы ругаться именно при выходе за границы, а не на умозрительную возможность оных. В любом случае, спасибо вам за пояснения. У вас - это где? Расскажете? )
  5. Всем добра Есть собственноручно написанный проект и тестбенч к нему. В проекте есть такие строки // states for monitor `define STATE_DIM_M 5 `define STATE_RNG_M (`STATE_DIM_M-1):0 `define CH_NUM 4 `define CH_RNG (`CH_NUM - 1):0 module monitor... reg access_rx_reg [`CH_RNG]; reg [`STATE_RNG_M] state; parameter ST_IDLE = `STATE_DIM_M'h0, ST_ACCESS_TX_START_0 = `STATE_DIM_M'h1, ST_ACCESS_TX_START_1 = `STATE_DIM_M'h2, ST_ACCESS_TX_START_2 = `STATE_DIM_M'h3, ST_ACCESS_TX_START_3 = `STATE_DIM_M'h4, ST_ACCESS_RX_START_0 = `STATE_DIM_M'h5, ST_ACCESS_RX_START_1 = `STATE_DIM_M'h6, ST_ACCESS_RX_START_2 = `STATE_DIM_M'h7, ST_ACCESS_RX_START_3 = `STATE_DIM_M'h8, ST_ACCESS_TX_0 = `STATE_DIM_M'h9, ST_ACCESS_TX_1 = `STATE_DIM_M'ha, ST_ACCESS_TX_2 = `STATE_DIM_M'hb, ST_ACCESS_TX_3 = `STATE_DIM_M'hc, ST_ACCESS_RX_0 = `STATE_DIM_M'hd, ST_ACCESS_RX_1 = `STATE_DIM_M'he, ST_ACCESS_RX_2 = `STATE_DIM_M'hf, ST_ACCESS_RX_3 = `STATE_DIM_M'h10, ST_DONE = `STATE_DIM_M'h11; В тестбенче tmain_m.sv же я хочу обратиться к регистру // attach main monitor module monitor mon_inst(.*); task process_monitor_state; input logic [`STATE_RNG_M] monitor_state_4_reset; forever @(posedge mc64M) case (monitor_state_4_reset) mon_inst.ST_ACCESS_RX_3, mon_inst.ST_ACCESS_RX_2, mon_inst.ST_ACCESS_RX_1, mon_inst.ST_ACCESS_RX_0: begin if (mon_inst.state == mon_inst.ST_IDLE) begin force mon_inst.access_rx_reg[monitor_state_4_reset - mon_inst.ST_ACCESS_RX_0] = 1'b1; end ModelSim SE-64 vlog 10.5 Compiler 2016.02 Feb 13 2016 по компиляции выдаёт: # ** Error: tmain_m.sv(1009): Illegal left-hand side in continuous assignment. ModelSim SE-64 vlog 10.6d Compiler 2018.02 Feb 24 2018 же выдаёт: # ** Warning: (vsim-12113) tmain_m.sv(1009): Force of a variable select having non-constant indices may produce unexpected results. Почему такие различия и что делать? Заранее спасибо.
  6. Накручено в исходном моём проекте, а тут я упрощал проще некуда. Я правильно вас понимаю, что вы предлагаете написать так: 54 force generate_module.gen_block[0].dut.ena = 1; force generate_module.gen_block[1].dut.ena = 1; force generate_module.gen_block[2].dut.ena = 1; force generate_module.gen_block[3].dut.ena = 1; #20ns release generate_module.gen_block[0].dut.ena; release generate_module.gen_block[1].dut.ena; release generate_module.gen_block[2].dut.ena; release generate_module.gen_block[3].dut.ena; Что нивелирует всю кажущуюся красоту цикла? Если другого варианта нет, то я готов учиться: просьба ткнуть носом в этом случае.
  7. Всем добра! Есть модуль DFF: module dut ( input logic clk, input logic res, input logic ena, input logic d, output logic q ); always_ff @(posedge clk) q <= res ? 0 : ena ? d : q; endmodule : dut Четыре (например) штуки которых `ifndef _generate_module_vh_ `define _generate_module_vh_ `define CH_NUM 4 `define CH_RNG [`CH_NUM-1:0] `endif // _generate_module_vh_ используются в вышестоящем: `include "generate_module.vh" module generate_module ( input logic clk, input logic res, input logic `CH_RNG ena, input logic `CH_RNG d, output logic `CH_RNG q ); genvar channel; generate for (channel = 0; channel < `CH_NUM; channel ++) begin: gen_block dut dut(.*, .ena(ena[channel]), .d(d[channel]), .q(q[channel])); end endgenerate endmodule : generate_module Хочу обработать таким testbench-eм: `timescale 1ns / 100ps `include "generate_module.vh" module generate_module_tb; logic clk; logic res; logic `CH_RNG ena; logic `CH_RNG d; wire `CH_RNG q; genvar channel; initial begin clk = 0; forever #10ns clk = ~clk; end initial begin res = 0; #20ns res = 1; #20ns res = 0; end task set_signal; output logic `CH_RNG signal; input logic value; integer channel; for (channel = 0; channel < `CH_NUM; channel++) signal[channel] = value; endtask : set_signal initial begin set_signal(ena, 0); #60ns set_signal(ena, 1); #20ns set_signal(ena, 0); end initial set_signal(d, 0); generate_module generate_module(.*); `define PASS `ifdef PASS generate for (channel = 0; channel < `CH_NUM; channel++) initial begin #100ns force generate_module.gen_block[channel].dut.ena = 1; #20ns release generate_module.gen_block[channel].dut.ena; end endgenerate `else task module_proc; input integer channel; 54 force generate_module.gen_block[channel].dut.ena = 1; #20ns release generate_module.gen_block[channel].dut.ena; endtask : module_proc initial begin module_proc(0); end `endif initial #150ns $stop; endmodule : generate_module_tb Так вот: когда `define PASS раскомментарен, вопросов нет, но при комментировании оного ModelSim ругается: # ** Error: (vsim-3745) generate_module_tb.sv(54): A variable index into the generate block 'generate_module_tb.generate_module.gen_block' is illegal. # Time: 0 ps Iteration: 0 Instance: /generate_module_tb File: generate_module_tb.sv Вопрос: есть ли способ передать индекс блока generate как переменную в задачу?
  8. set base_path ./../../Project/TestBench vlog -sv +acc $TestBenchDir/*.sv +define+DSN_ROOT=$base_path 39 $readmemh({`DSN_PATH,"data.dat"}, data); # Model Technology ModelSim SE-64 vlog 10.6d Compiler 2018.02 Feb 24 2018 # Start time: 12:09:21 on Nov 25,2019 # vlog -reportprogress 300 -sv "+acc" ../../Project/TestBench/dff_tb.sv "+define+DSN_ROOT=./../../Project/TestBench" # -- Compiling module dff_tb # ** Error: (vlog-13069) ** while parsing macro expansion: 'DSN_PATH' starting at ../../Project/TestBench/dff_tb.sv(39) # ** at ../../Project/TestBench/dff_tb.sv(39): near ".": syntax error, unexpected '.'. `define DSN_PATH(pth) `ifndef DSN_ROOT pth `else 17 {`DSN_ROOT,"/",pth} `endif $readmemh(`DSN_PATH("data.dat"), data); # ** Error: (vlog-13069) ../../Project/TestBench/dff_tb.sv(17): near "{": syntax error, unexpected '{', expecting class. Что-то я недопонимаю... Прошу простить за смену пользователя, но этот ник тоже мой: в своё время были причины на заведение второго, которого никак не уберу.
  9. В Туле у меня живёт хороший знакомый.
  10. Забрал бы. Как с Вами связаться?
  11. Вы уверены, что встал именно драйвер из Вашего квартуса, и что в Менеджере устройств никаких предупреждений нет? Загрузите сюда скрины менеджера и прочитайте, на всякий случай, это: https://www.intel.com/content/www/us/en/programmable/support/support-resources/knowledge-base/solutions/rd01082013_514.html
  12. Лицензия от 10.2 подошла. Спасибо ещё раз. Вопрос закрыт.