Verilog 返回错误值的Case语句
我正在尝试做这个7段显示功能。 输入的“rn”是我想要显示的数字,但是当我在ISE套件上进行模拟时,当它等于0或1时,它只能识别“rn”。任何大于该值的值都将失败,因此输出seg[7:0]将仅为0的8位Verilog 返回错误值的Case语句,verilog,seven-segment-display,Verilog,Seven Segment Display,我正在尝试做这个7段显示功能。 输入的“rn”是我想要显示的数字,但是当我在ISE套件上进行模拟时,当它等于0或1时,它只能识别“rn”。任何大于该值的值都将失败,因此输出seg[7:0]将仅为0的8位 module LED_7seg(clk, btn, rn, segA, segB, segC, segD, segE, segF, segG, segDP, anodes); input clk, btn; input [4:0] rn; output [3:0] anodes;
module LED_7seg(clk, btn, rn, segA, segB, segC, segD, segE, segF, segG, segDP, anodes);
input clk, btn;
input [4:0] rn;
output [3:0] anodes;
output segA, segB, segC, segD, segE, segF, segG, segDP;
wire [4:0] rn_in;
reg [7:0] seg;
assign {rn_in[4], rn_in[3], rn_in[2], rn_in[1], rn_in[0]} = rn;
always @ (*)
case (rn_in)
(5'b00001 || 5'b10001) : seg = 8'b11111100; //0
(5'b00001 || 5'b10001) : seg = 8'b01100000; //1
(5'b00010 || 5'b10010) : seg = 8'b11011010; //2
(5'b00011 || 5'b10011) : seg = 8'b11110010; //3
(5'b00100 || 5'b10100) : seg = 8'b01100110; //4
(5'b00101 || 5'b10101) : seg = 8'b10110110; //5
(5'b00110 || 5'b10110) : seg = 8'b10111110; //6
(5'b00111 || 5'b10111) : seg = 8'b11100000; //7
(5'b01000 || 5'b11000) : seg = 8'b11111110; //8
(5'b01001 || 5'b11001) : seg = 8'b11110110; //9
(5'b01010 || 5'b11010) : seg = 8'b11101110; //10
(5'b01011 || 5'b11011) : seg = 8'b00111110; //11
(5'b01100 || 5'b11100) : seg = 8'b10011100; //12
(5'b01101 || 5'b11101) : seg = 8'b01111010; //13
(5'b01110 || 5'b11110) : seg = 8'b10011110; //14
(5'b01111 || 5'b11111) : seg = 8'b10001110; //15
default : seg = 8'b00000000;
endcase
assign {segA, segB, segC, segD, segE, segF, segG, segDP} = seg;
endmodule
任何帮助都会有帮助。您正在使用| |运算符,它是逻辑or。在代码中,您正在计算两个非零值的逻辑OR,其计算结果始终为1。例如:(5'b00001 | | 5'b10001)=1 我想你想要的是: 变更(针对每个案例项目) 进入:
前者表示如果rn_in等于(5'b00001 | | 5'b10001)=1。后者意味着如果rn_in等于5'b00001或rn_in等于5'b10001。为什么前两个案例相同?哦,它只是一个类型。不需要在总线中创建
rn_,只需在case语句中直接使用rn
。即使您确实需要它,您也可以执行assign rn_in=rn代码>您不需要逻辑OR。。您可以将case语句更改为case(rn_in[3:0])
。此外,对于7段,我强烈建议设置如下参数:parameter NUM_0=8'hFC
,然后您可以说0:seg=NUM_0代码>这将在大型项目中产生巨大的差异。
(5'b00001 || 5'b10001) : seg = 8'b11111100; //0
5'b00001, 5'b10001 : seg = 8'b11111100; //0