2014-09-24 61 views
1

我努力做到以下几点:concat = {concat[7:0],clk}一个永远的循环如下内部:级联操作在一个循环中

bit [7:0] concat; 
    concat = 0; 
    forever begin 
     @(posedge clk); 
     concat = {concat[7:0],clk}; 
    end 

我想知道的后8次时钟迭代它将包含在任何点什么价值的时间,如果初始值为concat = 0

它可以不同于'hAA'h55在任何时间点?

回答

0

由于您有@(posdege clk),clk在评估作业的RHS时总是1(或x)。因此,concat将是'h00',h01,'h03,'h07,'h17,...

还要注意,如果任何其他线程试图在clk的相同正边沿上读取concat,则会出现竞争条件,所以请使用NBA来完成作业。

1

你不能只写concat = 0;你要么assign concat = 0;

initial begin 
    concat = 0; 
end 

永远不能用这样的,你是唯一允许的两个顶级水平initialalways。你想要一些东西像一个模拟如下:

initial begin 
    forever begin 
    @(posedge clk); 
    concat = {concat[6:0],clk}; 
    end 
end 

如果你正在写的合成,那么你可能想暗示一个触发器:

always @(posedge clk) begin 
    concat = {concat[6:0],clk}; 
end 

一旦你有固定的RTL它应该很容易在EDA Playground上试用。

+0

谢谢你回复Morgan。 假设一切正常,在UVM测试平台中使用上述(类似)代码段。我只是想知道输出是什么,因为我不能使用uvm_info宏来调试它,因为它在未发生的if条件中被使用。任何指针将不胜感激 – user3714538 2014-09-24 14:08:53

+0

@ user3714538该块只触发或等待'clk posedge',即clk为1.因此,concat将缓慢填满1,在8个clks始终为'FF'后。 – Morgan 2014-09-26 06:43:50