首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Verilog测试平台中多个同时独立的信号分配

Verilog测试平台中多个同时独立的信号分配
EN

Stack Overflow用户
提问于 2014-06-02 16:02:55
回答 2查看 1.8K关注 0票数 1

在VHDL中,我可以在我的测试平台上写到:

代码语言:javascript
复制
    signal clk      : std_logic := '0';
    signal count_in     : std_logic_vector(3 downto 0) := "0000";
    signal load     : std_logic := '0';
    signal reset        : std_logic := '0';
    signal count_out    : std_logic_vector(3 downto 0)  := "0000";
    ...

    clk <= not clk after 50 ns;
    reset <= '1' after 1400 ns, '0' after 1900 ns;
    count_in <= "1010" after 2500 ns;
    load <= '1' after 2700 ns, '0' after 3000 ns;

信号声明在testbench体系结构的“开始”之前,而启示录之后的部分则在testbench体系结构的主体中。一个更好的方法是在编写测试表时使用以“等待”语句结尾的进程。我知道如何在verilog以及VHDL中实现这一点。

在verilog中,我们可以有一个初始块,它只分配一次值。也可以有多个初始块。我没有尝试过这个,但我不认为从多个初始块驱动相同的信号是明智的。

现在我的问题是,如何将上述DUT刺激代码转换为Verilog?我希望我将使用一个带有多个#延迟值的赋值语句。对吗?我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-02 17:11:54

在Verilog 2001及更高版本中,您可以在声明时初始化变量,比如VHDL。另一种有趣但可能不太常见的方法是使用带阻塞分配的叉-连接块。在下面的代码中,叉连接块中的每一行都是独立和并发地执行的。

代码语言:javascript
复制
module test;
    reg clk, load, reset;
  reg [3:0] count_in, count_out;
    initial 
    begin
        fork 
            begin clk   = 0;        while (1) #50 clk = ~clk;               end 
            begin count_in  = 0;    #2500 ; count_in = 4'b1010;             end
            begin load      = 0;    #2700 ; load = 1 ; #3000; load = 0;     end
            begin reset = 0;        #1400 ; reset = 1; #1900; reset = 1;    end
            count_out   = 0;
        join
    end
endmodule

操场上的工作示例。

另外,请注意代码中的clk信号只切换一次。我稍微修改了一下,使时钟无休止地运转。

票数 4
EN

Stack Overflow用户

发布于 2014-06-02 16:55:23

我不太熟悉VHDL,但这看起来像是一个测试台刺激。我生成了用于比较这里的可运行测试用例。

Verilog的等价物看起来类似于:

代码语言:javascript
复制
reg clk = 1'b0;
reg [3:0] count_in = 4'b0000;
reg load = 1'b0;
reg reset = 1'b0;
wire [3:0] count_out; // test bench is not driving this
...

initial begin
  clk <= #50 !clk;
  reset <= #1400 1'b1;
  reset <= #1900 1'b0;
  count_in <= #2500 4'b1010;
  load <= #2700 1'b1;
  load <= #3000 1'b0;
end

这将产生相同的波形,但count_out是浮动的,而不是所有的零。根据命名约定,我认为count_out应该由正在测试的设备驱动,这需要一种有线类型。

SystemVerilog看起来可能如下所示:

代码语言:javascript
复制
/* Note: bit cannot be X or Z
 * initializes equivalent to 'logic clk = 1'b0;' or 'reg clk = 1'b0;'
 */
bit clk; 
bit [3:0] count_in;
bit load;
bit reset;
wire [3:0] count_out; // logic type is also okay
...

initial begin
  clk <= #50ns !clk;
  reset <= #1400ns 1'b1;
  reset <= #1900ns 1'b0;
  count_in <= #2500ns 4'b1010;
  load <= #2700ns 1'b1;
  load <= #3000ns 1'b0;
end

Verilog与系统Verilog 这里的工作实例

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23998728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档