0
我試圖實現4個時鐘信號,在Verilog中一個接一個地被激活。我寫了一個模塊,但林不知道如何做一個測試平臺它,因爲即時得到錯誤:創建一個4步時鐘
error: clk_pc Unable to assign to unresolved wires.
我想到這樣一個結果:
1000
0100
0010
0001
1000
0100
...
這是模塊:
module clock_divisor(input clk0,
input clk1,
input clk2,
input clk3,
output clk0_out,
output clk1_out,
output clk2_out,
output clk3_out);
reg clk0_out,clk1_out,clk2_out,clk3_out;
always @(posedge clk0 or posedge clk1 or posedge clk2 or posedge clk3) begin
if(clk0 == 1)begin
assign clk0_out = 0;
assign clk1_out = 1;
assign clk2_out = 0;
assign clk3_out = 0;
end
else if(clk1 == 1)begin
assign clk0_out = 0;
assign clk1_out = 0;
assign clk2_out = 1;
assign clk3_out = 0;
end
else if(clk2 == 1)begin
assign clk0_out = 0;
assign clk1_out = 0;
assign clk2_out = 0;
assign clk3_out = 1;
end
else if(clk3 == 1)begin
assign clk0_out = 1;
assign clk1_out = 0;
assign clk2_out = 0;
assign clk3_out = 0;
end
end
endmodule
而我的測試平臺:
module testbench();
reg clk_pc, clk_instruction_memory, clk_alu, clk_registers, reset;
// Clock Management
clock_divisor clock_divisor (clk_pc,
clk_instruction_memory,
clk_alu,
clk_registers,
clk_pc,
clk_instruction_memory,
clk_alu,
clk_registers);
initial begin
clk_pc = 1;
end
initial
#500 $finish;
initial begin
//$display (" Pc\tCLK\treset\tCurrent-inst");
//$monitor(" %d\t%b\t%b\t%h", pc, clk_pc, reset, current_instruction);
//Monitor Clocks
$display (" CLK0\tCLK1\tCLK2\tCLK3");
$monitor(" %b\t%b\t%b\t%b", clk_pc, clk_instruction_memory, clk_alu, clk_registers);
end
endmodule
任何人都可以告訴我爲什麼我得到這個錯誤,我怎麼讓我的模塊按預期工作?
什麼樣的錯誤?也。停止使用'procedural assignments',這些是'always'塊中'assign'的語句。在您的測試平臺中,您需要修改模塊的輸入。你沒有,因此沒有什麼變化。 – Serge
感謝您的評論:我得到:'錯誤:clk_pc無法分配給未解決的電線。「我應該用什麼來代替程序性任務? –
在這種情況下,您應該使用正常的非阻塞賦值。即'clk1_out <= 1;' – Serge