Bilgisayar Mimarisi için oluşturduğum bir işlemci için Verilog'da basit bir imza genişletici üzerinde çalışıyorum. İşteVerilog'da bir sayı nasıl imzalanır
Bugüne kadar bu var: [EDIT: Değiştirilen seçim ifadesini hafifçe]
`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
Ben inanıyorum sorunumu, çözecek süre (CLK == 1) düşünme eklendi
sonsuz bir döngü. Bunu iSim'de test etmeye çalıştığımda, devre asla başlamaz.
Ayrıca kopyalama sözdizimini kaldırmayı ve [8] - [15] için sadece genişletme [8] = uzat [7] vb. Yapmayı denedim, ancak aynı sonuç ortaya çıktı, bu yüzden en içteki sözdiziminin eminim doğru.
İşte sınama dosyası var:
`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
başarıyla bunu nasıl herhangi bir fikir?
sizin 'begin's ve' end's ... – Marty