reg [3:0] a = 1, b = 0;
always @(posedge clk) begin
if (a != 0)
a <= a + 1
end
always @(posedge clk) begin
if (a == 1)
b <= 1
end
假設兩個 always block 第一次 if 那個時間點是 10 ns,在此當下 a = 1, b = 0,因為電路是並行緣故。
但因為 wave 在此點後都會顯示新的值,故常會認為該點也是新的值!
我想我還需要一點時間來習慣,這個非流水線乘法器是個不錯的例子,忘記可以回來複習。
另外,關於如何在白紙上計算驗證也是我現在頭痛的問題,寫的真亂。
65 ns 時,因為 data_rdy = 1,故會進到 cnt 與 cnt_temp 互相作用的那個 always block,但因為電路並行,故 cnt_temp 值還未反映到 cnt,因此 mult1 和 mult2 那個 always block if 判斷都要看非阻塞賦值前的值,同理兩個 shift 變數也要以非阻塞賦值前的值來做計算。
沒有留言:
張貼留言