首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于内部模块互联的问题

关于内部模块互联的问题

各位走过路过的高手,小弟有些疑问又需要大家来帮忙了,我现在对于我的这个DDS项目已经把各个模块作的差不多了,现在就是需要在顶层文件中把各个模块连接起来!但是我在例化的时候又不知所措了,有几个问题:
1:我的一个思路是把四个波形数据存入四个基于BRAM的块中,也就是说我生成了四个相同的ROM核,而通过一个2-4译码器的输出来连接每个核的EN端,然后将其输入口与相位累加器的输出(地址)相连,请问这样可以吗?也就是说我的相位累加器的9位地址总线连接了四个都具有9位输入口的ROM。如果可以的话,我该怎么在顶层连接呢?比如说,我的相位累加器的输出口是address_out,而rom核的输入口是address_in,我怎么实现一个与四个相连?.address_out(address_in)?
2:我的这个2-4译码器的输出是decode_out[3:0],怎么如四个ROM核的使能EN段连接呢?也是按照上面的方法?
3:我的移位寄存器的输出是32位,那么我怎样将其不同的位输出给不同的模块?这样可以吗?:.qout[0:1](.mok1);.qout[2:17](.mok2)。。。?
先谢过了!!!

1。顶层给四个ROM核的address_in都对应上address_out就可以了,一个输出是可以赋值给多个输入的,就像你写的那样;
2。decode_out[3],decode_out[2],decode_out[1],decode_out[0]可以拿出来单独使用;
3。和2一样,32位可以拆开使用;
4。需要注意的是,顶层作为管理模块,需要定义一些中间变量(wire),用他们来作为各个模块的连接通道,另外拆开使用的时候要做到位宽的一致;
美梦成真-->噩梦降临!
非常感谢!还是这里高手比较多!
呵呵!希望以后常来啊!我们的版主唯一的缺点就是--太负责!!
嘿嘿!
 
谢谢版主们这么的热心,感动中。。。
还是要问版主,我按照你的意思来做,不知道你的意思是不是这样:
twofyima TWO (
.datain(data_out[1:0]),
.dataout[3](en1),
.dataout[2](en2),
.dataout[1](en3),
.dataout[0](en4)
);
我这样做之后总是有一个错误,那就是Expecting(,意思是缺失左括号。我把[]去掉之后出现这样的提示:Duplicate connection to named port dataout,而且我觉得这样也不行,因为它不能确定我到底是哪个和那个相连!
还有一个问题,我将.v和.xco文件放在一起综合,它出现这样的错误:Reference to undefined module sinrom。这个sinrom就是工程中的sinrom.xco,请问版主我该怎么解决?再一次麻烦你了!
而且我按照SyplifyPro上面的帮助信息加了这么一条在sinrom.v文件的相应位置上:/*synthesis syn_black_box =1 */;但是还是不行,郁闷!
我的意思是:
顶层调用译码模的时候,在顶层定义一个wire[3:0] data_temp信号,并且如下写译码模块的调用:
twofyima TWO (
.datain(data_out[1:0]),---data_out和dataout不是一个信号吧?
.dataout(dataout_temp)
);
在给rom模块en赋值的时候使用data_temp[0],data_temp[1],data_temp[2],data_temp[3];
例如:
my_rom rom(
.
.
.en(data_temp[0]),
.
)

sinrom就是你的rom核?在左边的项目管理栏中,顶层文件和.xco的关系正常吗?
美梦成真-->噩梦降临!
谢谢你解释的这么详细,这个问题已经解决了!基本上是你那个思想,我是用原理图实现,转换成HDL时我看到的代码就跟着差不多了!现在有一个问题是我的的一些引脚怎么约束为一般引脚,也就是不用全局GCKIOB,因为我的一些模块有一些时钟输入(单片机模拟的时序),模块的连接名字是clock,这样的话RTL能通过,但是在MAP的时候综合工具好像自动认为它是全局时钟输入端,告诉我这样:Illegal LOC on IPAD symbol "SCK" or BUFGP symbol "SCK_BUFGP"
(output signal=SCK_BUFGP), IPAD-IBUFG should only be LOCed to GCLKIOB site.
我该怎么将它约束为一般管脚?我加IBUF的时候(就是按照他说的作为全局输入)出了错误,现在想约束为一般管脚,还得麻烦你!
一般来说综合软件会自动分析你各个信号的扇出,他会把扇出最大的信号分配成全局信号,但是该信号并没有与全局资源相联接,就会出错,解决方法:
1。verilog:如下定义你不想让他作为全局信号使用的信号:
input clk /* synthesis syn_noclockbuf=1 */;
2。vhdl:在你的设计文件中加入:
attribute syn_noclock:boolean;
attribute syn_noclock of clk :signal is true;
3。另外这个也可以打开SyplifyPro,它里面也可以设置这个,作用完全一样;
美梦成真-->噩梦降临!
哦,非常感谢斑竹,还有,我是使用IP核生成的模块,而且顶层文件时原理图时不能用syplifypro,所以只能在Verilog中改,但是这个.v文件(由系统在生成IP核时产生)能修改吗?
这个文件最好别改动,这个文件里面都是一些底层的东西以及你生成ip核时配置的一些参数;
既然顶层是原理图有限制,lz干吗不建一个hdl的顶层呢,把你原来的顶层降低为次顶层,这样的工作量非常小;
美梦成真-->噩梦降临!
我懂你的意思,但是次顶级就不太懂了,我想干脆把全部换掉,也就是说把系统根据原理图所生成的HDL来换掉原理图,然后在这个HDL中加你上次说得内容!我试试看。(我试了在IP核生成的.v文件中加,没有效果)
不好意思,“次顶级”是我起的一个名字,我的意思是让这个原理图的顶层文件退居二线,用hdl在作顶层;
其实你并不一定要替换掉所有原理图,ise支持各种方式的混用;
美梦成真-->噩梦降临!
当然,我不用替换所有,我只是替换顶层原理图,不好意思,没说清楚,问题层出不穷,先到这里吧,呵呵,等我整理一下再问,免得浪费你的时间。现在功能仿真都不对了,我再看看吧
返回列表