我正在爲Verilog中的計算機體系結構創建的處理器開發簡單的簽名擴展器。如何在Verilog中籤名擴展數字
這裏是我到目前爲止有:[編輯:改變了選擇語句稍有]
`timescale 1ns/1ps
module SignExtender(CLK, extend, extended);
input[7:0] extend;
input CLK;
output[15:0] extended;
reg[15:0] extended;
wire[7:0] extend;
always
begin
while (CLK == 1)
extended[7:0] = extend[7:0];
extended[15:8] = {8{extend[7]}};
end
endmodule
我加了一段時間(CLK == 1),這將解決我的問題,我相信這是思考一個無限循環。當我嘗試在iSim中測試時,電路從未初始化。
我還試圖消除複製的語法和只是做擴展[8] =延長[7]等爲[8] - [15],但同樣的結果發生,所以我很肯定的是,最內層的語法是正確的。
這裏的測試文件:
`timescale 1ns/1ps
module SignExtender_testbench0;
// Inputs
reg [7:0] extend;
reg CLK;
// Outputs
wire [15:0] extended;
// Instantiate the Unit Under Test (UUT)
SignExtender uut (
.extend(extend),
.extended(extended)
);
initial begin
// Initialize Inputs
extend = 0;
#100; // Wait 100 ns for global reset to finish
extend = -30;
CLK = 1;
#10;
CLK = 0;
if (extended == -30)
$display("okay 1");
else
$display("fail 1");
extend = 40;
#10;
if (extended == 40)
$display("okay 2");
else
$display("fail 2");
end
endmodule
任何想法如何,我可以成功地做到這一點?
看你的'開始'和結束'... – Marty 2010-11-14 10:36:23