Inout с типом рег в Verilog - PullRequest
0 голосов
/ 12 июня 2018

Я использовал inout с c, но для c, чтобы быть в LHS процедурного присвоения, это должна быть переменная типа reg.Может кто-нибудь помочь мне с этим кодом?

module multiedgeclk(input clk ,[7:0] a,b,d, inout [7:0] c, output reg [7:0]f); 
always @(posedge clk)
c <= a + b;
always @(negedge clk)
f = c & d;
endmodule

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Порт inout не может быть назначен процедурно.Там нет ничего, чтобы указать, как долго удерживать это значение на порту.Это проблема для любого wire.Но провода имеют механизм силы для нескольких непрерывных драйверов, выигрывает самая высокая прочность.Таким образом, вы можете использовать непрерывное назначение, чтобы выборочно управлять значением или отключить его, задав значение z.

провод с;reg c_reg;

назначить c = c_reg;

Теперь вы можете процедурно присвоить c_reg значению или 8'bz

См. мою статью для получения дополнительной информациио проводах и типах рег .

0 голосов
/ 12 июня 2018

В verilog inout - направление порта.wire или reg - тип сигнала.Если вы хотите управлять двунаправленным портом, его следует объявить как inout wire или inout и управлять им с помощью сигнала включения. Вот пример двунаправленного порта.

module ABC( inout [7:0] c );
reg [7:0] c_out;
reg out_en;
assign c = out_en ? 8'hz : c_out; 
/* something here
... 
*/
endmodule
...