module temperature_threshold(
    input clk, // 时钟信号
    input rst, // 复位信号
    input temp_up, // 温度上调
    input temp_down, // 温度下调
    input temp_mode, // 温度模式切换
    input [11:0] temp_data, // 12位温度数据寄存器
    output reg led_ctrl, // LED灯控制信号
    output reg buzzer_ctrl, // 蜂鸣控制信号
    output reg [13:0] seg_display // 14位二进制数码管显示信号
);

parameter THRESHOLD_MODE = 1'b0; // 阈值设置模式
parameter NORMAL_MODE = 1'b1; // 正常模式

reg mode; // 模式状态,0为阈值设置模式,1为正常模式
reg [11:0] temp_threshold_high; // 温度上限阈值
reg [11:0] temp_threshold_low; // 温度下限阈值
reg [3:0] counter; // 切换模式计数器

always @(posedge clk or posedge rst) begin
    if (rst) begin
        mode <= THRESHOLD_MODE; // 复位时默认进入阈值设置模式
        temp_threshold_high <= 12'h000;
        temp_threshold_low <= 12'hFFF;
        counter <= 4'b0000;
        led_ctrl <= 1'b0;
        buzzer_ctrl <= 1'b0;
        seg_display <= 14'b00000000000000;
    end else begin
        // 阈值设置模式
        if (mode == THRESHOLD_MODE) begin
            if (temp_mode == 1'b0) begin // 切换进入正常模式
                mode <= NORMAL_MODE;
                counter <= 4'b0000;
            end else begin // 阈值设置模式下,第一次接收到切换信号时设置温度上限阈值
                case({temp_up, temp_down})
                    2'b01: begin // 温度上调
                        temp_threshold_high <= temp_threshold_high + 1;
                    end
                    2'b10: begin // 温度下调
                        temp_threshold_high <= temp_threshold_high - 1;
                    end
                    default: begin // 不进行任何操作
                    end
                endcase
            end
        end
        // 正常模式
        else begin
            if (temp_mode == 1'b0) begin // 切换进入阈值设置模式
                mode <= THRESHOLD_MODE;
                counter <= 4'b0000;
            end else begin
                if (temp_data >= temp_threshold_low && temp_data <= temp_threshold_high) begin
                    // 温度在阈值范围内,保持LED灯闪烁和蜂鸣器响铃
                    led_ctrl <= counter[2];
                    buzzer_ctrl <= 1'b1;
                    seg_display <= temp_data;
                    counter <= counter + 1;
                end else begin
                    // 温度超出阈值范围,LED灯持续亮起,蜂鸣器鸣响
                    led_ctrl <= 1'b0;
                    buzzer_ctrl <= 1'b0;
                    seg_display <= temp_data;
                end
            end
        end
    end
end

endmodule
``
Verilog HDL语言编写代码要求如下:模块完成温度数据的阙值设置、比较、以及LED编码输出功能。数据处理模块的数据来源主要有数据缓存模块以及系统按键控制模块其中数据缓存模块提供的12位二进制码为实时温度转码数据处理模块将所收到的数据同预先保存在寄存器当中的温度阙值参数进行比较当条件满足时则触发相应响应操作。系统按键控制模块通过输入低电平信号对温度阙值参数进行修改数据处理模块会在收到相应控制信

原文地址: https://www.cveoy.top/t/topic/eM51 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录