我发现了这个测温解码器的verilog代码(在代码编码器中,但这是错误的)。
我想让它适应节奏,从中生成网表。 我的问题是,实际代码以节奏生成[7:0] + 1输入和[3:0]输出。
我想要的是一个具有8 + 1个单输入和4个单输出的模块:
module thermometer_encoder_8bit(
out0,out1,out2,out3, // 4-bit binary Output
in0,in1,in2,in3,in4,in5,in6,in7, // 8-bit Input
enable // Enable for the encoder
);
input enable;
input in0,in1,in2,in3,in4,in5,in6,in7;
output out0,out1,out2,out3;
reg out0,out1,out2,out3;
...
这是实际的,未经适应的代码:
module thermometer_encoder_8bit(
binary_out , // 4 bit binary Output
encoder_in , // 8-bit Input
enable // Enable for the encoder
);
output [3:0] binary_out ;
input enable ;
input [7:0] encoder_in ;
reg [3:0] binary_out ;
always @ (enable or encoder_in)
begin
binary_out = 0; // 0000 0000
if (enable) begin
case (encoder_in)
8'b00000001 : binary_out = 1; // 0000 0001
8'b00000011 : binary_out = 2; // 0000 0011
8'b00000111 : binary_out = 3; // 0000 0111
8'b00001111 : binary_out = 4; // 0000 1111
8'b00011111 : binary_out = 5; // 0001 1111
8'b00111111 : binary_out = 6; // 0011 1111
8'b01111111 : binary_out = 7; // 0111 1111
8'b11111111 : binary_out = 8; // 0000 1111
endcase
end
end
endmodule
有没有可能以一种简单的方式做到这一点?
问候, DaHomer
答案 0 :(得分:0)
首先,我没有看到default
声明。
如果您确定encoder_in
仅包含案例陈述中提到的那些数字,您可以使用类似的内容。 binary_out = $clog2(encoder_in + 1)
答案 1 :(得分:0)
我会使用您所需的输入和输出修改现有代码,然后进行分配以将现有逻辑与新的输入和输出接口。我还没有编译过这个,所以请耐心等待。
module thermometer_encoder_8to4(
out0 , // 4 bit binary Output
out1 ,
out2 ,
out3 ,
in0 , // 8-bit Input
in1,
in2,
in3
in4,
in5,
in6,
in7
enable // Enable for the encoder
);
output out0 ;
output out1;
output out2;
output out3;
input enable ;
input in0;
input in1;
input in2;
input in3;
input in4;
input in5;
input in6;
input in7;
// Keep the binary_out and use this to drive the new non-vector outs...
reg [3:0] binary_out ;
// Here is where we assign the non-vector outs and non-vector ins.
wire [7:0] encoder_in = {in7,in6,in5,in4,in3,in2,in1,in0};
assign {out3,out2,out1,out0} = binary_out;
always @ (enable or encoder_in)
begin
binary_out = 0; // 0000 0000
if (enable) begin
case (encoder_in)
8'b00000001 : binary_out = 1; // 0000 0001
8'b00000011 : binary_out = 2; // 0000 0011
8'b00000111 : binary_out = 3; // 0000 0111
8'b00001111 : binary_out = 4; // 0000 1111
8'b00011111 : binary_out = 5; // 0001 1111
8'b00111111 : binary_out = 6; // 0011 1111
8'b01111111 : binary_out = 7; // 0111 1111
8'b11111111 : binary_out = 8; // 0000 1111
endcase
end
end
endmodule
我将添加以下内容,并指出这不是您的具体问题,但想知道这是否对您有用。
在原始模块的实例化中,您可以将各个输入和输出分配为连接向量。
thermometer_encoder_8bit u0_ thermometer_encoder_8bit
(
binary_out ({out0,out1,out2,out3}), // 4-bit binary Output
encoder_in ({in0,in1,in2,in3,in4,in5,in6,in7}), // 8-bit Input
enable (enable) // Enable for the encoder
);