2015-09-25 18 views
0

這看起來很簡單,但我無法找到如何在任何地方執行此操作......我想要做的就是將1添加到4位線。總的來說,我想要計算一個8位變量中1的個數。我們在A中調用這個輸入。輸出將是outA。兩者都被定義爲電線; inA是8位,其中outA是4位。如何添加1到Verilog中的4位線

wire[0:7] inA; 
wire[0:3] outA; 

我可以循環做一個要經過陣列:

for (i = 0; i <= 7; i = i + 1) begin 
    if (inA[i] == 1) begin 
     outA <= outA + 1; 
    end 
end 

但是,這是行不通的。 有人可以幫忙嗎?我對Verilog(和VHDL)非常陌生,所以我真的不知道我做錯了什麼。

回答

0

有幾個方法可以做到這一點,這裏是一個選項:

reg [0:3] ones; 
    integer i; 
    always @ (inA) begin 
    ones = 0; 
    for (i = 0; i < 8; i = i + 1) begin 
     ones = ones + inA[i]; 
    end 
    end 
    assign outA = ones; 

因爲你沒有提供完整的源代碼(如for環的情況下),我們只能猜測是什麼問題在於。

但請記住像outA <= outA + 1是非阻塞賦值將計劃在always結束執行,使得最後的分配將覆蓋所有以前的。

由於outA(其中的方式將是一個reg如果您for環嵌入在always塊),只更新了always塊已完成「執行」後,只有inA[7]可引起增量outA

有關always塊如何執行的更多信息,請參閱my answer here

+0

這很完美,謝謝!我假設增加了一個,然後分配輸出的值是我錯過了。 再次謝謝! – Apolymoxic

+0

@Aolymoxic爲什麼你需要價值作爲'wire'? – Morgan

+0

@Morgan我不認爲這是絕對需要的......這只是我開始的地方。它應該模仿一個輸出,並且在一個實際運行的硬件程序中,它不是一根電線嗎? – Apolymoxic