में किसी संख्या को साइन-इन करने के लिए कैसे करें मैं कंप्यूटर आर्किटेक्चर के लिए बना रहे प्रोसेसर के लिए वेरिलोग में एक साधारण साइन-एक्सेंडर पर काम कर रहा हूं।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) सोच है कि मेरी समस्या है, जो मेरा मानना है कि है को हल किया जा जोड़ा एक अनंत पाश। जब मैं आईएसआईएम में इसका परीक्षण करने की कोशिश करता हूं, तो सर्किट कभी शुरू नहीं होता है।
मैंने प्रतिलिपि वाक्यविन्यास को हटाने की कोशिश की और [8] = [15] आदि के लिए विस्तारित [8] = विस्तार [7] इत्यादि भी किया, लेकिन एक ही परिणाम होता है, इसलिए मुझे पूरा यकीन है कि आंतरिकतम वाक्यविन्यास सही है।
यहाँ परीक्षण फ़ाइल है:
`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
कोई भी विचार कैसे मैं इस सफलतापूर्वक कर सकते हैं?
देखो अपने 'begin's और' end's ... – Marty