Inout с типом рег в Verilog

Я использовал 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 ответа

В 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

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

провод с; reg c_reg;

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

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

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

Другие вопросы по тегам