马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
勇敢的芯伴你玩转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[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。
|