5129|2

55

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ROM例化之后的仿真出错了 [复制链接]

本来是想实现频率合成器的,使用ROM,例化之后仿真出现这个错误,实在不知道怎么修改了,望大侠们指导。

# ** Error: (vsim-3037) F:/work/DDS/DDS.v(21): Missing instance name in instantiation of 'my_rom'.
#         Region: /DDS_vlg_tst/i1

verilog 顶层文件为:
// 数字式频率合成器DDS
module DDS(clk,ftw,rec,out_q,ack);
   input     clk;
input     ftw;   //  频率控制字长
input     rec;   //  接收信号使能
output    ack;   //  接收应答信号
output    [9:0] out_q;  // 幅度值输出

reg       [23:0]  phase_adder,frq_reg;  //  相位地址,频率寄存器
   reg       [9:0]   rom_address,address;   //  rom地址,对应区间的地址
//reg       [9:0]   rom_out;               //  rom查找表的输出
reg       s1,s2,a1,a2;                   //  显示相位的区间
reg       a;                             //  a与ack相同,在判断是使用
reg       ack;
reg       [9:0] out_q;
wire      [9:0] rom_out;
//  rom例化
my_rom(.address(rom_address),
        .clock(clk),
    .q(rom_out));

//  频率寄存部分
always@(posedge clk)
   begin
     if(rec)    //  接收信号使能有效,开始接收频率控制字
     begin
       frq_reg<=ftw;
     ack<=1;     //  接收成功,应答信号有效
     a<=1;
     end
   else if(a)     //  一个周期后复位ack
     begin
     ack<=0;
     a<=0;
   end
   end
//    相位累加部分  
always@(posedge clk)
   begin
     phase_adder<=phase_adder+frq_reg;   //  相位累加
   rom_address[0]<=phase_adder[12];      //  累加器的高12位作为地址进行rom查表
   rom_address[1]<=phase_adder[13];
   rom_address[2]<=phase_adder[14];
   rom_address[3]<=phase_adder[15];
   rom_address[4]<=phase_adder[16];
   rom_address[5]<=phase_adder[17];
   rom_address[6]<=phase_adder[18];
   rom_address[7]<=phase_adder[19];
   rom_address[8]<=phase_adder[20];
   rom_address[9]<=phase_adder[21];
   s2<=phase_adder[22];         //  显示相位区间
   s1<=phase_adder[23];
   end
   //  ROM查找表部分
always@(posedge clk)
   begin
     a1<=s1;
   a2<=s2;
   if({s1,s2}==2'b00)
   address<=rom_address;    //  0~pi/2区间的地址
   else if({s1,s2}==2'b01)
     address<=~rom_address;   //  pi/2~pi区间的地址
   else if({s1,s2}==2'b10)
     address<=rom_address;    //  pi~3*pi/2区间地址
   else if({s1,s2}==2'b11)
     address<=~rom_address;   //  3*pi/2~2*pi区间地址
   if({a1,a2}==2'b00)         //  0~pi/2区间的幅度输出
     out_q<=rom_out;
   else if({a1,a2}==2'b01)    //  pi/2~pi区间的幅度输出
     out_q<=rom_out;
   else if({a1,a2}==2'b10)    //  pi~3*pi/2区间的幅度输出
     out_q<=~rom_out+1;       //  输出值为负
   else if({a1,a2}==2'b11)    //  3*pi/2~2*pi区间的幅度输出
     out_q<=~rom_out+1;
   end
endmodule
仿真程序为:

`timescale 1 ns/ 1 ns
module DDS_vlg_tst();
reg clk;
reg ftw;
reg rec;                                            
wire ack;
wire [9:0]  out_q;
wire [9:0]  rom_out;                     
DDS i1 (
.ack(ack),
.clk(clk),
.ftw(ftw),
.out_q(out_q),
.rec(rec)
);
initial                                                
begin                                                  
          clk=0;rec=0;ftw=65536;
   #30   rec=1;
   #30    rec=0;
end                                                   
always                                                                  
begin                                                  
      #50   clk=~clk;                                      
end                                                   
endmodule
跪求指导!!!
此帖出自FPGA/CPLD论坛

最新回复

问题要是解决了的话,记得说一声,也给别人做个参考啊  详情 回复 发表于 2013-7-3 19:55
点赞 关注
 

回复
举报

6423

帖子

17

TA的资源

版主

沙发
 
my_rom(.address(rom_address),这个地方错了,module_name instance_name(port_associations)这才是例化的格式
此帖出自FPGA/CPLD论坛
 
 

回复

6423

帖子

17

TA的资源

版主

板凳
 
问题要是解决了的话,记得说一声,也给别人做个参考啊
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表