
气体检测VHDL程序
5星
- 浏览量: 0
- 大小:None
- 文件类型:ZIP
简介:
模块KEY(CLK,RESET,ADD,MINUS,KEY_IN,SIGNAL,HOUR_EN,MINUTE_EN,SECOND_EN,KEY_OUT);
输入输出信号
reg [3:0]KEY_IN;
reg [1:0]SIGN;
输出寄存器
output ADD、MINUS、HOUR_EN、MINUTE_EN、SECOND_EN和[3:0]KEY_OUT;
寄存器定义
reg [19:0]CNT;
wire [3:0]KEY_SCAN、KEY_LOW、KEY_SAMP;
register [3:0] KEY_SAMP_R、KEY_RST和KEY_RST_R;
逻辑部分
always @posedge CLK或negedge RESET时开始执行以下操作:
if (!RESET) 则将KEY_SAMP置为4b1111,否则将其值设为KEY_IN。
always @posedge CLK或negedge RESET时继续执行:
if (!RESET) 则 KEY_SAMP_R置0b1111,否则将其值设为KEY_SAMP。
assign KEY_SCAN等于KEY_SAMP_R与非KEY_SAMP的按位与结果。
always @posedge CLK或negedge RESET时开始执行:
if (!RESET) 则 CNT初始化为0x0;
else 如果KEYSCAN有效则将CNT保持不变,否则将其值加1b1.
always @posedgeCLK 或 negedge RESET时继续执行:
if(!RESET) 则 KEY_RST置0b1111, 否则当CNT等于全1状态时将KEY_RST设为KEY_IN。
always @posedge CLK或negedge RESET时开始执行:
if (!RESET) 则 KEY_RST_R初始化为0b01。
else将其值保持不变,直到KEY_RST被设置。
assign KEY_LOW等于KEY_RST_R与非KEY_RST的按位与结果。
always @posedge_CLK 或 negedge RESET时开始执行:
if(!RESET)则将所有输出置初始状态;否则根据KEY_LOW的不同取值进行响应处理:
case (KEY_LOW):
4b0001: 根据SIGN的值调整KEY_OUT;
4b0010: 根据ADD和SIGN的组合对KEY_OUT进行增减操作;
4b0100: 根据SIGN是否为全1状态来控制MINUS端口的变化;
4b1000: 根据HOUR_EN、MINUTE_EN和SECOND_EN的状态判断是否需要调整这些端口。
default情况保持不变。
endcase
endmodule
全部评论 (0)


