Verilog:在向量中指定一条线高,其余线低?
在FPGA上,不使用寄存器,例如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;
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 :-)