2014-02-28 2 views
1

이 7 세그먼트 표시 기능을 수행하려고합니다. 입력 "rn"은 내가 표시하고자하는 숫자이지만, ISE suite에서 시뮬레이션을 수행하는 동안 0 또는 1과 같을 때 "rn"을 인식 할 수 있습니다. 그보다 큰 값은 실패합니다 따라서 출력 seg [7 : 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;  

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 

도움이 될 것입니다.

+0

첫 번째 두 경우가 같은 이유는 무엇입니까? – timrau

+0

아, 그저 형식 일뿐입니다. – n00d1es

+0

'rn_in' 버스를 만들 필요는 없으며 case 문에서 직접'rn'을 사용하십시오. 만약 당신이 그것을 필요로했다면, 당신은 단지'assign rn_in = rn; '을 할 수 있습니다. – nguthrie

답변

2

|| 연산자, 논리 또는. 귀하의 코드에서, 당신은 논리 곱을 계산합니다. 0이 아닌 두 값의 논리합은 항상 1로 평가됩니다. 예를 들면 다음과 같습니다. (예 : (5'b00001 || 5'b10001) = 1)

원하는 것은 다음과 같음 :로 (각각의 경우 항목)

변경

(5'b00001 || 5'b10001) : seg = 8'b11111100; //0 

:

5'b00001, 5'b10001 : seg = 8'b11111100; //0 

전자 수단은 rn_in (5'b00001 || 5'b10001) = 1과 동일한 경우. 후자는 rn_in이 5'b00001이거나 rn_in이 5'b10001 인 경우를 의미합니다.

+0

고마워요. 나는 밤새 이걸 붙잡 혔어. – n00d1es