要添加自定义乘法IP核,必须在sources中单击鼠标右键,然后在Add Directories中添加
添加文件夹后,如下图所示。
测试将代码连接到主模块的端口的初学者容易出错
输入端口:从模块内部看,输入端口必须为线网数据类型,从模块外部看,输入端口可以连接到线网或reg数据类型的变量。
输出端口:从模块内部看,输出端口可以是线网或reg数据类型,从模块外部看,输出必须连接到线网类型的变量,不能连接到reg类型的变量。
(125条消息([初学者Verilog笔记]模块输入/输出_qq_34670678博客-CSDN博客https://blog.csdn.net/QQ _ 34670678/article/dette )
我的错误是某个英语“:”被错误地写在了中文的“:”里
(125条信息) Modelsim出现Syntax error,unexpected non-printable character错误_天津大学神经网络方向-研究生博客-CSDN博客3359 blog .
观察下一个模拟的顶层模块和测试模块是否正确
以下部分参考赛灵思IP除法器官方文档 《pg151-div-gen》
除法器IP LutMult
鼠标左键为Run
鼠标右键为Reset
latency=8,实际为7
latency=1
从功能模拟看正确的输出
合并后的模拟也基本相同
选择latency=4
右键单击选定的div_gen_900_synth_1,然后单击" sy thesis run properties " & gt; 选择报告
选择latency=4可以获得以下资源利用率
或者
report _ utilization-hierarchical
report _ utilization-name div _ gen _ 900 _ 1
除法器IP Radix2 latency=1
latency=8
根据实际情况更改位数:
div_gen_900除法器10位除法器12位
mult_gen_32_12乘法器32位12位
模拟验证
现在,让程序接近实际,
div_gen_10_12是10位除以12位得到的结果
mult_gen_5是五倍运算
mult_gen_20是20倍的运算
mult_gen_25是25倍的运算
mult_gen_32_8是32位8位
将div_gen_10_12的除数作为乘数代入mult_gen_32_8
模拟图
结果是正确的,但是除法太费时间了,定为1
assign相当于将公式右侧的电路直接用wire (线)连接到左侧的连接,左侧的信号必须为wire型。
(125条消息) Verilog赋值语句_FireBird的列-CSDN博客_verilog赋值https://blog.csdn.net/first lai/article/details/52712042
的赋值方式reg [9:0] set_div; always @ (negedgeresetorposedgeclkout ) Beginset_div=10 ) D900; 两点: Array信号必须标明维数,set_div值必须在always块赋值,不能直接用“=”在always语句块之外赋值。
在顶层模块内部用reg赋值,可以正确进行功能模拟
除法器看似马上生效,但输入数据分别在下降沿和上升沿更新,均在上升沿的后半周期左右完成除法器的除法运算。
风险一,这里保持始终较高的向除法器输入有效的信号,由于处理未被细分,因此可能存在风险。