
verilog调用子模块
function[9:0]address;inputorg_dir;input[9:0]org_reg,Apt;reg[9:0]add,add_min,add1,sub,...
function [9:0]address;
input org_dir;
input[9:0] org_reg,Apt;
reg[9:0] add,add_min,add1,sub,sub_abs,rom_add,rom_add1,min_reg,org_gy;
reg rom_clk, rom_dir;
begin
assign add=10'b0000000000;
assign org_gy=503*org_reg/Apt+504;
assign add1=add+1;
sin_romxx rom1(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom2(.clock(rom_clk),.address(add1),.q(rom_add1));
#20 rom_clk=0; //use sin_rom
#20 rom_clk=1;
assign rom_dir=(rom_add1>=rom_add)?1:0;
/*if (rom_add1>=rom_add)
rom_dir<=1;
else
rom_dir<=0;*/
if (rom_dir==org_dir)
begin
sub<=rom_add-org_gy;
lpm_absxx abs1(.data(sub),.result(sub_abs));
min_reg<=sub_abs;
add_min=add;
end
for(add=1;add<1008;add=add+1)
begin
sin_romxx rom3 (.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom4 (.clock(rom_clk),.address(add1),.q(rom_add1));
#20 rom_clk=0; //use sin_rom
#20 rom_clk=1;
assign rom_dir=(rom_add1>=rom_add)?1:0;
/* if (rom_add1>=rom_add)
rom_dir<=1;
else
rom_dir<=0;*/
if (rom_dir==org_dir)
begin
sub<=rom_add-org_gy;
lpm_absxx abs2(.data(sub),.result(sub_abs));
if (sub_abs<min_reg)
begin min_reg<=sub_abs;
add_min=add;
end
end
end
address<=add_min;
end
/*sin_romxx rom1(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom2(.clock(rom_clk),.address(add+1),.q(rom_add1));
lpm_absxx abs1(.data(sub),.result(sub_abs));
sin_romxx rom3(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom4(.clock(rom_clk),.address(add+1),.q(rom_add1));
lpm_absxx abs2(.data(sub),.result(sub_abs));*/
endfunction 展开
input org_dir;
input[9:0] org_reg,Apt;
reg[9:0] add,add_min,add1,sub,sub_abs,rom_add,rom_add1,min_reg,org_gy;
reg rom_clk, rom_dir;
begin
assign add=10'b0000000000;
assign org_gy=503*org_reg/Apt+504;
assign add1=add+1;
sin_romxx rom1(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom2(.clock(rom_clk),.address(add1),.q(rom_add1));
#20 rom_clk=0; //use sin_rom
#20 rom_clk=1;
assign rom_dir=(rom_add1>=rom_add)?1:0;
/*if (rom_add1>=rom_add)
rom_dir<=1;
else
rom_dir<=0;*/
if (rom_dir==org_dir)
begin
sub<=rom_add-org_gy;
lpm_absxx abs1(.data(sub),.result(sub_abs));
min_reg<=sub_abs;
add_min=add;
end
for(add=1;add<1008;add=add+1)
begin
sin_romxx rom3 (.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom4 (.clock(rom_clk),.address(add1),.q(rom_add1));
#20 rom_clk=0; //use sin_rom
#20 rom_clk=1;
assign rom_dir=(rom_add1>=rom_add)?1:0;
/* if (rom_add1>=rom_add)
rom_dir<=1;
else
rom_dir<=0;*/
if (rom_dir==org_dir)
begin
sub<=rom_add-org_gy;
lpm_absxx abs2(.data(sub),.result(sub_abs));
if (sub_abs<min_reg)
begin min_reg<=sub_abs;
add_min=add;
end
end
end
address<=add_min;
end
/*sin_romxx rom1(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom2(.clock(rom_clk),.address(add+1),.q(rom_add1));
lpm_absxx abs1(.data(sub),.result(sub_abs));
sin_romxx rom3(.clock(rom_clk),.address(add),.q(rom_add));
sin_romxx rom4(.clock(rom_clk),.address(add+1),.q(rom_add1));
lpm_absxx abs2(.data(sub),.result(sub_abs));*/
endfunction 展开
3个回答
展开全部
verilog在调用模块的时候(也称模块实例化),信号端口可以通过位置或名称关联,其形式如下面的例子:
module and (C,A,B);
input A,B;
output C;
...
endmodule
and A1 (T3, A1, B 1); //A1为调用and这个模块的一个加法器,在对A1进行实例化时采用位置关联,T3对应输出端口C,A对应A1,B对应B1。
and A2(.C(T3),.A(A2),.B(B2));//在对A2实例化时采用名字关联,C是and 器件的端口,其与信号T3相连,A对应A2,B对应B2。
module and (C,A,B);
input A,B;
output C;
...
endmodule
and A1 (T3, A1, B 1); //A1为调用and这个模块的一个加法器,在对A1进行实例化时采用位置关联,T3对应输出端口C,A对应A1,B对应B1。
and A2(.C(T3),.A(A2),.B(B2));//在对A2实例化时采用名字关联,C是and 器件的端口,其与信号T3相连,A对应A2,B对应B2。
展开全部
想问啥?
追问
留个qq,详问
追答
904980511
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
drhdggfghsjfuwehk
suehfuehfuhfsuhuowohfuishfuejisfjespejfsjpeuiwijfopsjueiksfuej9psod
jsjfoe4897215sjfeukshfjmkfshe79415gr
suehfuehfuhfsuhuowohfuishfuejisfjespejfsjpeuiwijfopsjueiksfuej9psod
jsjfoe4897215sjfeukshfjmkfshe79415gr
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询