這是我第一次使用verilog hdl進行編程,並且無法弄清楚我的代碼出了什麼問題。我需要在行爲代碼中設計一個簡單的ALU。用於ALU的Verilog HDL行爲編碼調用模塊
到目前爲止,我已經創建了一個減法器和加法器模塊(我需要添加更多的模塊,但是我希望在添加其他模塊之前讓這些模塊在ALU模塊中工作)。
我有單獨的.V文件以下模塊在同一個項目(很肯定這是一種行爲?):
module adder3bit(sum, co, a, b);
parameter n = 2;
output reg [n:0] sum;
output reg co;
input [n:0] a;
input [n:0] b;
always @(a, b)
{co, sum} = a + b;
endmodule
module subtract3bit(diff, bo, a, b);
parameter n = 2;
output reg [n:0] diff;
output reg bo;
input [n:0] a;
input [n:0] b;
always @(a, b)
{bo, diff} = a - b;
endmodule
我測試過這些,看到他們的工作。
現在我想給他們打電話的主要ALU模塊:
module alu(out, overflow, a, b,sel);
input [2:0] a, b;
input sel;
output [2:0] out;
output overflow;
always @(a,b,sel)
begin
if(sel=='b0)
adder3bit A1(out,overflow,a,b);
if(sel=='b1)
subtract3bit S1(out, overflow, a, b);
end
endmodule
我的語法可能是錯誤的,但它顯示的錯誤。我對verilog很不熟悉。我覺得我第一次感受到學習C.幫助將不勝感激。
我知道它正在調用模塊,但我認爲這與if語句有關。
謝謝我希望能學到新的東西!
你用'n'&'N'來標識相同的參數是非法的;挑一個或另一個。我建議使用大寫字母來識別參數,因爲這是行業內常見的做法和幾種編程語言 – Greg
當然你是對的,謝謝! –
謝謝你的幫助。所以模塊需要提前初始化。這意味着每當always塊中的模塊輸出被讀取時,它會根據a和b讀取新的輸入?另外,是否允許使用單個輸出線而不是聲明兩條線,總和和差異? – Darklink9110