我正在使用带有32位双向总线的altera合成器:
module Test
(
inout [31:0]biBus
);
wire [31:0] biEna;
wire [31:0] biVal;
我想知道是否有一种语法而不是这样做:
assign biBus [ 0 ] = biEna [ 0 ] ? biVal [ 0 ] : 1'bz;
assign biBus [ 1 ] = biEna [ 1 ] ? biVal [ 1 ] : 1'bz;
...
assign biBus [ 31 ] = biEna [ 31 ] ? biVal [ 31 ] : 1'bz;
可以在一行中完成,例如:
assign biBus = biEna ? biVal : *'bz;
根据相应的biEna值,为总线的每个位分配biVal或hi-z。我如何指定上面的hi-z部分(如果可能的话?
答案 0 :(得分:1)
您可以在always_comb
或always @*
块中执行此操作:
integer i;
for (i = 31 ; i >=0 ; i--)
if (biEna[i]) biBus[i] = biVal[i];
else biBus[i] = 1'bz;
或:
biBus = 'z; //Initialize all bits to z
for (i = 31 ; i >=0 ; i--)
if (biEna[i]) biBus[i] = biVal[i]; //Overwrite the z value for bits whose enable is 1
或者如果你想继续使用不带总是阻塞的assign语句:
genvar i;
for (i=31 ; i>=0 ; i--)
assign biBus [ i ] = biEna [ i ] ? biVal [ i ] : 1'bz;
答案 1 :(得分:1)
只需{32{1'bZ}}
或32'hZZZZZZZZ
。