我制作了两个verilog模块.第一个采用9位数字并返回第一次出现1的位置.
module findPositionOf_1(
input [8:0] data,
output reg [3:0] position
);
always @(data)
begin
if(data==9'b0000_00000)
position=4'b0000;
else if(data[0]==1)
position=4'b0000;
else if(data[1]==1)
position=4'b0001;
else if(data[2]==1)
position=4'b0010;
else if(data[3]==1)
position=4'b0011;
else if(data[4]==1)
position=4'b0100;
else if(data[5]==1)
position=4'b0101;
else if(data[6]==1)
position=4'b0110;
else if(data[7]==1)
position=4'b0111;
else if(data[8]==1)
position=4'b1000;
end
endmodule
Run Code Online (Sandbox Code Playgroud)
第二个模块返回第二个出现的1.它调用第一个模块,首先将该位更改为零,然后再次查找出现的1.
module findPositionOf_2nd_1(
input [8:0] r1_data,
output [3:0] position1
);
reg [3:0] pos,pos2;
reg [8:0] temp;
integer i;
always @(r1_data)
begin
findPositionOf_1 f1(.data(r1_data), .position(pos));
i=pos;
temp=r1_data;
temp[i]=0;
findPositionOf_1 f2(temp,pos2);
if(pos2==4'b0000)
position1=0;
else
position1=pos2;
end
endmodule …Run Code Online (Sandbox Code Playgroud) 如果我已正确理解事物,则 SystemVerilog参数不具有固有类型,但将采用分配给它的值的类型.类似地,'1表示法应该适应变量的类型.当我们将两者合并时会发生什么?
也就是说,这些片段中的参数实例化会产生什么结果呢?
localparam BAR = '1;
Run Code Online (Sandbox Code Playgroud)
和
module testModule #(parameter BAR = 0, parameter [3:0] LONGBAR = 0)
(input logic a, output logic b);
assign b = a;
endmodule
testModule #('1, '1) u_testModule0(a, b);
Run Code Online (Sandbox Code Playgroud)
和
testModule #(BAR, BAR) u_testModule1(a, b);
Run Code Online (Sandbox Code Playgroud)