我在Verilog中创建了一个由Datapath和Control组成的多周期CPU . 控制(状态机)的输出是寄存器,但数据路径之间的连接是电线 . 如果应该有线信号(在伪代码中): wire = OR(wire coming from a mux, reg output from control) ,我该怎么做?你可以在Verilog中使用带有reg的电线吗?如果没有,是否有更好的方法来实现这一点?控制信号输出可以是控制模块中的寄存器,但顶部模块中的电线是否可以?
wire = OR(wire coming from a mux, reg output from control)
更新图片以澄清:
是的,您可以在Verilog中使用或者使用wire和reg输出 .
是的,每个子模块的输出(实质上是导线)可以直接或间接地内部连接到子模块内的reg .
我认为这是一个很好的方法 .
现在,您甚至可以将模块的输出声明为“reg”,但这只是声明输出和reg分别的语义糖 . 我更喜欢明确的方式(即q1_o和q1_reg) .
module Submod(input clk_i, intput d_i, output q1_o, output reg q2_o); reg q1_reg; always @(posedge clk_i) begin q1_reg <= d_i; q2_o <= ~d_i; end assign q1_o = q1_reg; endmodule module Main(input clk_i, input [3:0]ext_i, output [1:0]ext_o) wire mux, x1, x2; Submod Submod_inst(clk_i, ext_i[0], x1, x2); assign ext_o[0] = x1; assign mux = ext_i[1] ? ext_i[2] : ext_i[3]; assign ext_o[1] = mux | x2; /* something like this */ endmodule
1 回答
是的,您可以在Verilog中使用或者使用wire和reg输出 .
是的,每个子模块的输出(实质上是导线)可以直接或间接地内部连接到子模块内的reg .
我认为这是一个很好的方法 .
现在,您甚至可以将模块的输出声明为“reg”,但这只是声明输出和reg分别的语义糖 . 我更喜欢明确的方式(即q1_o和q1_reg) .