如何将双向总线定义为' z'或作为' 0,1'在一条线?

时间:2015-02-11 23:55:00

标签: verilog

我正在使用带有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部分(如果可能的话?

2 个答案:

答案 0 :(得分:1)

您可以在always_combalways @*块中执行此操作:

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