在VHDL中,我可以在我的测试平台上写到:
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?我希望我将使用一个带有多个#延迟值的赋值语句。对吗?我该怎么做呢?
发布于 2014-06-02 17:11:54
在Verilog 2001及更高版本中,您可以在声明时初始化变量,比如VHDL。另一种有趣但可能不太常见的方法是使用带阻塞分配的叉-连接块。在下面的代码中,叉连接块中的每一行都是独立和并发地执行的。
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信号只切换一次。我稍微修改了一下,使时钟无休止地运转。
发布于 2014-06-02 16:55:23
我不太熟悉VHDL,但这看起来像是一个测试台刺激。我生成了用于比较这里的可运行测试用例。
Verilog的等价物看起来类似于:
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看起来可能如下所示:
/* 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;
endVerilog与系统Verilog 这里的工作实例
https://stackoverflow.com/questions/23998728
复制相似问题