30 lines
794 B
Verilog
30 lines
794 B
Verilog
module DEM_Reverse (
|
||
input clk, // 时钟输入
|
||
input [6:0] therm_in, // 7位温度计码输入 (MSB部分)
|
||
input [4:0] bin_in, // 5位二进制码输入 (LSB部分)
|
||
output reg [7:0] data_out // 恢复的8位DAC输入
|
||
);
|
||
|
||
// 统计温度计码中1的个数(权重总和)
|
||
function [2:0] count_ones;
|
||
input [6:0] data;
|
||
integer i;
|
||
begin
|
||
count_ones = 0;
|
||
for (i = 0; i < 7; i = i + 1) begin
|
||
if (data[i]) count_ones = count_ones + 1;
|
||
end
|
||
end
|
||
endfunction
|
||
|
||
// 组合逻辑计算中间值
|
||
wire [2:0] msb_value = count_ones(therm_in);
|
||
wire [4:0] lsb_value = bin_in;
|
||
wire [7:0] data_comb = {msb_value, lsb_value};
|
||
|
||
// 在时钟上升沿寄存输出
|
||
always @(posedge clk) begin
|
||
data_out <= data_comb;
|
||
end
|
||
|
||
endmodule |