Je tente d'implémenter 4 signaux d'horloge activés les uns après les autres dans Verilog. J'ai écrit un module, mais je ne suis pas sûr de savoir comment faire un banc d'essai pour elle parce que Im obtenir l'erreur:Création d'une horloge à 4 étapes
error: clk_pc Unable to assign to unresolved wires.
Je me attends à un résultat comme celui-ci:
1000
0100
0010
0001
1000
0100
...
C'est le module:
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
Et mon banc d'essai:
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
Quelqu'un peut-il me dire pourquoi je reçois cette erreur et comment puis-je faire fonctionner mon module comme prévu?
quel genre d'erreur? Aussi. arrêtez d'utiliser les 'affectations procédurales', ce sont les instructions avec' assign' dans le bloc 'always'. Dans votre banc d'essai, vous devez modifier les entrées de votre module. Vous n'avez pas, donc rien ne change. – Serge
Merci pour le commentaire: Im getting: 'error: clk_pc Impossible d'attribuer aux fils non résolus.'Qu'est-ce que je devrais utiliser à la place des affectations procédurales? –
vous devez utiliser des affectations normales non bloquantes dans ce cas. c'est-à-dire 'clk1_out <= 1;' – Serge