में बीसीडी योजक मैं Verilog में एक बीसीडी योजक लिखने की कोशिश कर रहा हूं, लेकिन मुझे मॉड्यूल में से एक के साथ परेशानी हो रही है। विशेष रूप से, वह योजक जो दो बीसीडी अंकों को लेता है और उन्हें जोड़ता है। तो, विचार यह है कि यदि दो अंकों का योग नौ से कम या बराबर है, तो यह सही है। हालांकि, यदि यह अधिक है, तो 6 का ऑफसेट जोड़ा जाना चाहिए। यहाँ अब तक मेरी Verilog कोड है: फिर भी जब मैं Xilinx में यह संश्लेषण करने की कोशिशवेरिलोग
module DIGITADD(
input [3:0] IN_A,
input [3:0] IN_B,
input CIN,
output reg COUT,
output reg [3:0] SUM
);
wire s2, c2;
always @ (*)
begin
assign {c2, s2} = IN_A + IN_B + CIN;
if(s2 <= 9 && c2 == 0) begin
assign {COUT, SUM} = {c2, s2};
end
else if({c2, s2} > 9) begin
assign {COUT, SUM} = {c2, s2 + 6};
end
end
endmodule
,, मैं निम्नलिखित त्रुटियाँ मिलती है:
त्रुटि: HDLCompilers: 247 - "DIGITADD.v" लाइन 33 संदर्भ अदिश तार 'c2' के लिए एक कानूनी reg या चर lvalue
त्रुटि नहीं है: HDLCompilers: 247 - "DIGITADD.v" अदिश तार 'एस 2' के लिए लाइन 33 संदर्भ एक कानूनी reg या चर lvalue नहीं है
त्रुटि: एचडीएल कॉम्पलर: 42 - "DIGITADD.v" लाइन 33 प्रक्रियात्मक assi के अवैध बाएं हाथ की ओर gn
मैंने कुछ चीजों को बदलने के लिए तार बदलने की कोशिश की, लेकिन मैं अभी भी इसे काम नहीं कर सकता। किसी भी मदद की सराहना की है।
ठीक है, मुझे अभी पता चला है। इसकी मूल रूप से केवल verilog परेशान होने वाला है, लेकिन अगर किसी को यह पता चलता है और एक ही समस्या है तो कुछ युक्तियाँ। 1. हमेशा ब्लॉक में असाइन स्टेटमेंट्स न डालें 2. इस मामले में, तार 3 होना चाहिए। असल में, आप reg [4: 0] s2 घोषित करते हैं और SUM = s2 [3: 0] और COUT s2 असाइन करते हैं [4] 4. फिर तर्क – DemonicImpact
करने के लिए यह बहुत आसान है आप अपना जवाब जोड़ सकते हैं और फिर इसे स्वीकार कर सकते हैं। इस तरह यह प्रश्न अनुत्तरित प्रश्न सूची पर प्रकट नहीं होगा। – George
ठीक है धन्यवाद। मुझे नहीं पता था कि, अगर यह स्पष्ट नहीं है, तो मैं अभी भी इस तरह का नया हूं। – DemonicImpact