Verilog:在向量中指定一条线高,其余线低?

Verilog:在向量中指定一条线高,其余线低?,verilog,fpga,Verilog,Fpga,在FPGA上,不使用寄存器,例如 module FooReg(output wire o_foo, input wire [1:0] i_address); parameter FOO_MSB = 3; reg [FOO_MSB:0] r_data = 0; assign o_foo = r_data[FOO_MSB]; // OUTPUT HEAD OF FOO always @(*) begin r_data = 0;

在FPGA上,不使用寄存器,例如

module FooReg(output wire o_foo, input wire [1:0] i_address);

  parameter FOO_MSB = 3;

  reg [FOO_MSB:0] r_data = 0;

  assign o_foo = r_data[FOO_MSB]; // OUTPUT HEAD OF FOO

  always @(*)
  begin
    r_data            = 0;        // RESET DATA VECTOR
    r_data[i_address] = 1'b1;     // SET ADDRESSED ELEMENT OF VECTOR
  end
endmodule // FooReg
但是,有没有一种方法可以仅仅使用网络来实现相同的功能呢

比如,

module FooNet(output wire o_foo, input wire [1:0] i_address);

  parameter FOO_MSB = 3;

  wire [FOO_MSB:0] w_data = (w_data[i_address] is 1'b1) BUT REST ARE 1'b0; // <------

  assign o_foo = w_data[FOO_MSB]; // OUTPUT HEAD OF FOO

endmodule // FooNet
模块FooNet(输出线o_-foo,输入线[1:0]i_地址);
参数FOO_MSB=3;

连线[FOO_MSB:0]w_data=(w_data[i_address]为1'b1),但其余为1'b0;// 您没有使用/制作寄存器

reg
关键字具有误导性。这并不意味着您需要一个或多个寄存器,如果您在always部分中为变量赋值,则需要使用'reg'关键字

只有遵循标准寄存器模板
always@(posedge clk)…
,才能实例寄存器

请注意,在System Verilog中,名称
wire
reg
被替换为关键字“logic”,您仍然可以使用与使用的语法完全相同的语法

我已经使用“/>>>”标记为您的代码添加了注释


另请参见类似于
w_data=256'b1的内容。非常感谢。我又想起了一个重要的时刻!非常感谢。这也解释了我收到的一些错误代码。
reg [FOO_MSB:0] r_data = 0;

  assign o_foo = r_data[FOO_MSB]; // OUTPUT HEAD OF FOO

  //>>> The section below generates a combinatorial circuit 
  //>>> and as such you only get logic or wires out of this.
  always @(*)
  begin
    //>>> No you are NOT resetting a register here
    //>>> Your setting a vector (a bundle of wires) wire to all zeros 
    r_data            = 0;        // RESET REGISTER
    //>>> One of the wires is not zero but one
    r_data[i_address] = 1'b1;     // SET REQUESTED BIT
  end
endmodule // FooRegister //>>> And change the name because no registers are made here :-)