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
Смотрите мою статью для получения дополнительной информации о проводах и типах рег.