为什么单独分配输出值时出错?
Why is it wrong when I separately assign the output values?
以下代码正确,编译成功。
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign {w,x,y,z} = {a,b,c,d,e,f,2'b11};
endmodule
下一个错了,令人费解
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign w = {a,b[2:0]};
assign x = {c[4:3],b[2:0]};
assign y = {c[4:3],d[2:0]};
assign z = {d[4:3],2'b11};
endmodule
为什么单独赋输出值时出错?
顺便说一下,这是原来的问题:
给定几个输入向量,将它们连接在一起,然后将它们分成几个输出向量。有六个 5 位输入向量:a、b、c、d、e 和 f,总共 30 位输入。对于 32 位输出,有四个 8 位输出向量:w、x、y 和 z。输出应该是输入向量的串联,后跟两个 1 位:
我试了很多次了,就是不能单独给它们赋值。
您在计算每个赋值的位数时需要更加小心。您需要确保每个的 RHS 都有 8 位。而且,您需要为每个输入使用正确的 part-selects。您的代码甚至不使用 2 个输入:e
和 f
.
这相当于您的第一个代码示例:
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign w = {a[4:0], b[4:2] };
assign x = {b[1:0], c[4:0], d[4] };
assign y = {d[3:0], e[4:1] };
assign z = {e[0] , f[4:0], 2'b11};
endmodule
没有必要使用[4:0]
,但我选择这样做是为了更清楚RHS上有多少位。
以下代码正确,编译成功。
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign {w,x,y,z} = {a,b,c,d,e,f,2'b11};
endmodule
下一个错了,令人费解
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign w = {a,b[2:0]};
assign x = {c[4:3],b[2:0]};
assign y = {c[4:3],d[2:0]};
assign z = {d[4:3],2'b11};
endmodule
为什么单独赋输出值时出错?
顺便说一下,这是原来的问题:
给定几个输入向量,将它们连接在一起,然后将它们分成几个输出向量。有六个 5 位输入向量:a、b、c、d、e 和 f,总共 30 位输入。对于 32 位输出,有四个 8 位输出向量:w、x、y 和 z。输出应该是输入向量的串联,后跟两个 1 位:
我试了很多次了,就是不能单独给它们赋值。
您在计算每个赋值的位数时需要更加小心。您需要确保每个的 RHS 都有 8 位。而且,您需要为每个输入使用正确的 part-selects。您的代码甚至不使用 2 个输入:e
和 f
.
这相当于您的第一个代码示例:
module top_module (
input [4:0] a, b, c, d, e, f,
output [7:0] w, x, y, z );//
assign w = {a[4:0], b[4:2] };
assign x = {b[1:0], c[4:0], d[4] };
assign y = {d[3:0], e[4:1] };
assign z = {e[0] , f[4:0], 2'b11};
endmodule
没有必要使用[4:0]
,但我选择这样做是为了更清楚RHS上有多少位。