完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题:专用乘法器不适用于FPGA而是模拟
工作正常。 我试过的: 在我的一个设计中,我使用10x10bit乘法器。 原来我只是 使用w6 = Vout * Vout。 在模拟中,这似乎适用于我的设备 利用率总结它表明使用了4个MULT18X18SIO中的1个。 一旦在FPGA上实现了设计,我就发现了乘法器 实际上只使用8x8bit乘法。 经过一番阅读后我发现你可以直接控制了 MULT18X18SIO具有以下Verilog模块:http://www.xilinx.com/support/documentation/user_guides/ug331.pdf 第385页。 模块mult18x18sio( 输入[7:0] a, 输入[7:0] b, 输入clk, 输出[15:0] prod ); reg [15:0] prod; 总是@(posedge clk)prod 以下为原文 Problem: Dedicated multiplier does not work on FPGA but simulationworks fine. What I have tried: In one of my designs I use a 10x10bit multiplier. Originally I justused w6=Vout*Vout. In simulation this seemed to work and in my deviceutilization summary it states that 1 of 4 MULT18X18SIOs is used. Once the design was implemented on the FPGA I found that the multiplieris actually using only 8x8bit multiplication. After some reading I found that you can directly control theMULT18X18SIO with the following module for Verilog found here: http://www.xilinx.com/support/documentation/user_guides/ug331.pdfon page 385. module mult18x18sio( input [7:0] a, input [7:0] b, input clk, output [15:0] prod ); reg [15:0] prod; always @(posedge clk) prod <= a*b; endmodule Page 386 of the same manual states that you must enable themult_style=block setting. I have been unable to find this setting selection inISE design Suite v11.1. I also found a statement that says you can use (* mult_style = "{block}" *) to setthe mult_style in code, however when I try to use this just before I call the mult18x18sio,I get a warning from synthesizing saying that the selection block is not availablefor the mult_style parameter. I am also having trouble getting the module to import or run with mydesign. When trying to add the module Iam going to [Project] [New Source] then select [Verilog module] enter the nameof the module and fill out the parameter information as seen above. When I callthe module in my main design I do the following: mult18x18siomult1(Vout,Vout,clk,w6); but get an error stating that it could not find themodule/primitive ‘mult18x18sio’ I am new to Verilog, ISE design suite, and FPGA’s in general. Any helpyou could provide would be appreciated. If you require a simple example of mydesign, and how I am implementing the multiplication please let me know and Iwill post it. |
|
相关推荐
5个回答
|
|
>同一手册的第386页说明您必须启用mult_style = block设置。
我无法在ISE design Suite v11.1中找到此设置选项。 我没有该版本的代码,但尝试右键单击过程块中的Synthesize - XST。 在底部单击流程属性。 在弹出窗口的底部选择属性显示levelas advanced。 在“其他XST命令行选项”行中输入-mult_style BLOCK 单击确定。 -R -------------------------------------------------- --------------------------不要忘记回复,不要接受作为解决方案----------- -------------------------------------------------- --------------- 以上来自于谷歌翻译 以下为原文 > Page 386 of the same manual states that you must enable the mult_style=block setting. I have been unable to find this setting selection in ISE design Suite v11.1. I don't have that version of the code but try to right click on Synthesize - XST in the processes block. At the bottom click on process properties. At the bottom of the pop up select the property display level as advanced. On the "Other XST command line options" line enter -mult_style BLOCK Click Ok. -R ---------------------------------------------------------------------------- Don't forget to reply, kudo, and accept as solution ---------------------------------------------------------------------------- |
|
|
|
谢谢你的快速反应。
我能够在你建议的位置添加-multi_style BLOCK。 但是,我仍然收到错误“找不到模块/原始'mult18x18sio' 看起来很傻,但我已经包含一个小屏幕截图,显示verilog模块被包含在内,而我正在调用它。 有关我的错误或添加模块的正确方法的任何建议? 以上来自于谷歌翻译 以下为原文 Thank you for the quick response. I was able to add the -mult_style BLOCK where you suggested. However, I still get the error "Could not find module/primitive 'mult18x18sio' Seems silly, but I have included a small screen shot showing the verilog module is inluded, and that I am calling it. Any suggestions on what I am doing incorrect, or the proper way to add the module? |
|
|
|
我没有像那样使用它但是括号错了它应该只是“阻塞”你不应该在两个地方都需要约束。
命令行选项将应用于所有实例。 您也不需要评论(//)。 请参阅以下手册的第137页。 http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_4/xst.pdf >看起来很傻,但我已经包含了一个小屏幕截图,显示verilog模块被包含在内,而我正在调用它。 有关我的错误或添加模块的正确方法的任何建议? 喜欢这个 电线wf; mult18x18sio mult1( .Vout(VOUT), .Voutx(VOUTA), .clk(CLKX), .w6(WF)); 你不应该有2个名为Vout的端口。 他们需要独特的名字。 您可以在主例程中使用括号中的名称。 即clkx和wf。 -R -------------------------------------------------- --------------------------不要忘记回复,不要接受作为解决方案----------- -------------------------------------------------- --------------- 以上来自于谷歌翻译 以下为原文 I haven't used it like that but the brackets are wrong it should be just "block" You shouldn't need the constraint in both places. The command line option will apply to all instances. You don't need the comment either (//). See page 137 of the manual below. http://www.xilinx.com/support/documentation/sw_manuals/xilinx12_4/xst.pdf >Seems silly, but I have included a small screen shot showing the verilog module is inluded, and that I am calling it. Any suggestions on what I am doing incorrect, or the proper way to add the module? like this wire wf; mult18x18sio mult1( .Vout(vout), .Voutx(vouta), .clk(clkx), .w6(wf)); You should not have 2 ports called Vout. They need unique names. You would use the names in parentheses in the main routine. ie clkx and wf. -R ---------------------------------------------------------------------------- Don't forget to reply, kudo, and accept as solution ---------------------------------------------------------------------------- |
|
|
|
所以这里显示的代码是我调用模块的地方,而不是我创建它的地方。
模块参数是a,b,clk和prod。 你在这里看到的是我想说Vout * Vout = w6的地方。 你是说我不允许两次将相同的值传递给模块吗? 如果我不是,那么我是否必须创建一个虚拟线或寄存器以传递该值? 基本上我想要永远摆正Vout。 以上来自于谷歌翻译 以下为原文 So the code that is shown here is where I call the module, not where I create it. The module parameters are a, b, clk, and prod. What you see here is where I am trying to say Vout*Vout=w6. Are you saying that I am not allowed to pass the same value into the module twice? If i am not, then do i have to create a dummy wire or register to be able to pass in the value? Essentially I want to always square the Vout. |
|
|
|
我意识到你要做的太晚了。
尝试这个: 电线w6; mult18x18sio mult1( .A(VOUT), .B(VOUT), .clk(CLK), .w6(W6)); 网上有很多很好的verilog教程可以帮到你。 -R -------------------------------------------------- --------------------------不要忘记回复,不要接受作为解决方案----------- -------------------------------------------------- --------------- 以上来自于谷歌翻译 以下为原文 I realized what you were trying to do too late. Try this: wire w6; mult18x18sio mult1( .a(Vout), .b(Vout), .clk(clk), .w6(w6)); There are many good verilog tutorials online that should help you out. -R ---------------------------------------------------------------------------- Don't forget to reply, kudo, and accept as solution ---------------------------------------------------------------------------- |
|
|
|
只有小组成员才能发言,加入小组>>
2416 浏览 7 评论
2821 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2292 浏览 9 评论
3372 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2459 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1143浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
581浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
447浏览 1评论
2002浏览 0评论
726浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 14:57 , Processed in 1.415046 second(s), Total 85, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号