特权同学

勇敢的芯伴你玩转Altera FPGA连载57:3-8译码器实验

0
阅读(1310)

勇敢的芯伴你玩转Altera FPGA连载57:3-8译码器实验

特权同学,版权所有

配套例程和更多资料下载链接:

http://pan.baidu.com/s/1i5LMUUD

1.jpg

 

         所谓3-8译码器,大家可以baidu或bing一下。相信学习FPGA的读者一定都上过数字电路的课程,所以这里对3-8译码器功能的实现给个真值表,如表8.1所示,一目了然。

表8.1 3-8译码器真值表

SW3

SW6,SW5,SW4

复位

点亮LED

X

X,X,X

0

全灭

OFF

X,X,X

1

全灭

ON

OFF,OFF,OFF

1

D2点亮

ON

OFF,OFF,ON

1

D3点亮

ON

OFF,ON,OFF

1

D4点亮

ON

OFF,ON,ON

1

D5点亮

ON

ON,OFF,OFF

1

D6点亮

ON

ON,OFF,ON

1

D7点亮

ON

ON,ON,OFF

1

D8点亮

ON

ON,ON,ON

1

D9点亮

注:X表示ON或OFF,即任意状态。

    本实例的工程代码如下。

module cy4(

            input ext_clk_25m, //外部输入25MHz时钟信号

            input ext_rst_n,   //外部输入复位信号,低电平有效

            input[3:0] switch, //4个拨码开关接口,ON -- 低电平;OFF -- 高电平

            output reg[7:0] led //8个LED指示灯接口   

        );                                                

 

//-------------------------------------

 

always @ (posedge ext_clk_25m or negedge ext_rst_n)      

    if(!ext_rst_n) led <= 8'hff;   //所有LED关闭

    else if(switch[0]) led <= 8'hff;   //SW3处于OFF状态,所有LED关闭

    else begin  //SW3处于ON状态,点亮的LED位由SW4/SW5/SW6拨码开关的输入决定

        case(switch[3:1])

            3'b111: led <= 8'b1111_1110;   //D2点亮

            3'b110: led <= 8'b1111_1101;   //D3点亮

            3'b101: led <= 8'b1111_1011;   //D4点亮

            3'b100: led <= 8'b1111_0111;   //D5点亮

            3'b011: led <= 8'b1110_1111;   //D6点亮

            3'b010: led <= 8'b1101_1111;   //D7点亮

            3'b001: led <= 8'b1011_1111;   //D8点亮

            3'b000: led <= 8'b0111_1111;   //D9点亮

            default: ;

        endcase

    end

 

endmodule

       这个代码中只有一个always语句,这里对拨码开关做判断,首先判断拨码开关SW3(switch[0])为OFF,则让所有LED也都OFF;接着用case语句判断拨码开关SW4/SW5/SW6(switch[3:1])的输入状态,根据真值表,相应获得输出结果,点亮译码后的某个特定LED。