勇敢的芯伴你玩转Altera FPGA连载57:3-8译码器实验
2018年03月26日 16:20 发布者:rousong1989
勇敢的芯伴你玩转Altera FPGA连载57:3-8译码器实验特权同学,版权所有配套例程和更多资料下载链接:http://pan.baidu.com/s/1i5LMUUD
所谓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 switch, //4个拨码开关接口,ON -- 低电平;OFF -- 高电平 output reg led //8个LED指示灯接口 ); //------------------------------------- always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) led <= 8'hff; //所有LED关闭 else if(switch) led <=8'hff; //SW3处于OFF状态,所有LED关闭 else begin //SW3处于ON状态,点亮的LED位由SW4/SW5/SW6拨码开关的输入决定 case(switch) 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)为OFF,则让所有LED也都OFF;接着用case语句判断拨码开关SW4/SW5/SW6(switch)的输入状态,根据真值表,相应获得输出结果,点亮译码后的某个特定LED。
