帮我看一下这段verilog代码哪有问题。。。

纯粹只是自己看了点书完完全全的新手。。。C语言也没有学完。。。老师就要求我们自学verilog并且做四位二进制BCD码实现。。。这段代码下载到板子上完全就乱显示。。。没定义的灯也亮 module BCDjiafaqi(A,B,out,oY,N,AN ); input [3:0] A; input [3:0] B; input [3:0] N; output [3:0] AN; reg [3:0] sum; output reg out; output reg[7:0] oY; assign AN=N; always@(A,B,oY,N,AN) begin if(A>9&&B>9) sum=4'b1111; else sum=A+B; if(sum>9) begin sum=sum+6; out=1; end else out=0; case(sum) 4'b0000:oY=8'hc0; 4'b0001:oY=8'hf9; 4'b0010:oY=8'ha4; 4'b0011:oY=8'hb0; 4'b0100:oY=8'h99; 4'b0101:oY=8'h92; 4'b0110:oY=8'h82; 4'b0111:oY=8'hf8; 4'b1000:oY=8'h80; 4'b1001:oY=8'h90; default:oY=8'hff; endcase end endmodule

以下代码只是做一些修改,功能能否实现没有验证。首先你得代码好乱,里面有多个if-else语句,所以我给你分成几个always块了。其次AN既然是assign赋值,需要定义成wire类型。两个位宽为4的值相加,和最后取位宽为5,以防溢出。所以,下面的case语句还得修改。敏感参数如果不清楚就直接用*代替即可.就说这些吧,具体的你再修改编译仿真下吧,确定功能符合再下载到fpga中。
module BCDjiafaqi(A,B,out,oY,N,AN );
input [3:0] A;
input [3:0] B;
input [3:0] N;
output wire [3:0] AN;
reg [4:0] sum;
output reg out;
output reg[7:0] oY;
assign AN=N;
always@(*)
begin
if(A>9&&B>9)
sum=4'b01111;
else
sum=A+B;
end
always@(*)
begin
if(sum>9)
sum=sum+6;
out=1;
else
out=0;
end
always@(*)
begin
case(sum) //下面还需要修改
4'b0000:oY=8'hc0;
4'b0001:oY=8'hf9;
4'b0010:oY=8'ha4;
4'b0011:oY=8'hb0;
4'b0100:oY=8'h99;
4'b0101:oY=8'h92;
4'b0110:oY=8'h82;
4'b0111:oY=8'hf8;
4'b1000:oY=8'h80;
4'b1001:oY=8'h90;
default:oY=8'hff;
endcase
end
endmodule
温馨提示:答案为网友推荐,仅供参考
相似回答