verilog模块调用语句问题
modulesine_reader(step_size,clk,generate_next,reset,sample_out,new_sample_ready);inpu...
module sine_reader(step_size,clk,generate_next,reset,sample_out,new_sample_ready);
input clk;
input generate_next;
input reset;
input [19:0] step_size;
output [15:0] sample_out;
output new_sample_ready;
wire [21:0] raw_addr;
wire [21:0] sum1;
wire [15:0] raw_data;
wire [15:0] sample;
wire [9:0] rom_addr;
//定义传输线sum1
assign sum1={2'b00+step_size}+raw_addr;
//调用DFF
D_FFRE #(22)dffre22(.d(sum1),.clk(clk),.r(reset),.en(generate_next),.q(raw_addr));
//定义rom_addr的值 地址处理
assignrom_addr=raw_addr[20]?((raw_addr[20:10]==1024)?1023:(~raw_addr[19:10]+1)):raw_addr[19:10];
//调用sine_rom函数
sine_romrom_inst(.clk(clk),.dout(raw_data),.addr(rom_addr));
//定义sample的值 数据处理
assignsample=raw_addr[21]?(~raw_data[15:0]+1):raw_data[15:0];
//调用DFFRE
D_FFRE #(22)dffre21(.d(sample),.clk(clk),.en(generate_next),.q(sample_out));
//调用DFF
D_FF #(1)dff(.d(generate_next),.clk(clk),.q(new_sample_ready));
endmodule
这边调用函数中#(XX)是什么意思?求解!
DFFRE的代码
module D_FFRE
(
d,
en,
r,
clk,
q
);
parameter WIDTH = 1;
input en;
input r;
input clk;
input [WIDTH-1:0] d;
output [WIDTH-1:0] q;
reg [WIDTH-1:0] q;
always @ (posedge clk)
if ( r )
q <= {WIDTH{1'b0}};
else if (en)
q <= d;
else q <= q;
endmodule 展开
input clk;
input generate_next;
input reset;
input [19:0] step_size;
output [15:0] sample_out;
output new_sample_ready;
wire [21:0] raw_addr;
wire [21:0] sum1;
wire [15:0] raw_data;
wire [15:0] sample;
wire [9:0] rom_addr;
//定义传输线sum1
assign sum1={2'b00+step_size}+raw_addr;
//调用DFF
D_FFRE #(22)dffre22(.d(sum1),.clk(clk),.r(reset),.en(generate_next),.q(raw_addr));
//定义rom_addr的值 地址处理
assignrom_addr=raw_addr[20]?((raw_addr[20:10]==1024)?1023:(~raw_addr[19:10]+1)):raw_addr[19:10];
//调用sine_rom函数
sine_romrom_inst(.clk(clk),.dout(raw_data),.addr(rom_addr));
//定义sample的值 数据处理
assignsample=raw_addr[21]?(~raw_data[15:0]+1):raw_data[15:0];
//调用DFFRE
D_FFRE #(22)dffre21(.d(sample),.clk(clk),.en(generate_next),.q(sample_out));
//调用DFF
D_FF #(1)dff(.d(generate_next),.clk(clk),.q(new_sample_ready));
endmodule
这边调用函数中#(XX)是什么意思?求解!
DFFRE的代码
module D_FFRE
(
d,
en,
r,
clk,
q
);
parameter WIDTH = 1;
input en;
input r;
input clk;
input [WIDTH-1:0] d;
output [WIDTH-1:0] q;
reg [WIDTH-1:0] q;
always @ (posedge clk)
if ( r )
q <= {WIDTH{1'b0}};
else if (en)
q <= d;
else q <= q;
endmodule 展开
1个回答
展开全部
给实例化的模块里面的参数重新赋值,相当于defparam
更多追问追答
追问
有点不太明白哎 能再详细点吗 给哪些参数重新赋值?
追答
算问到点子上了,这种写法的问题就在于可读性差,必须看你的D_FFRE模块里面的定义。
D_FFRE #(22)dffre21(.d(sample),.clk(clk),.en(generate_next),.q(sample_out));
可读性好的写法应该是
D_FFRE dffre21(.d(sample),.clk(clk),.en(generate_next),.q(sample_out));
defparam dffre21.参数名 = 22;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询