首先纠正下千年同志的回答:
你的第一点,请看清楚楼主两个always块第一个是grade,第二个是grade1,grade2分别表示个位十位;
第二点:脉冲信号不能做判断条件这句,我拍这胸脯告诉你,绝对可以。。只有你用时序逻辑,在时钟沿检测脉冲信号就可以,只有保证脉冲宽度大于一个时钟周期就绝对能检测到。
第三点:楼主确实有这么点不完善,不过有些时候可以预先确知某些信号同时发生也可以不考虑的。
最后的你建议,先学C再改verilog,个人意见非常不赞同。。很多软件工程师特别喜欢把写软件哦思维带到硬件描述语言中来。。调用个函数啦。。写个for,写个while什么,最后还问为啥综合报错。。。除非你是专门做测试的用systemC或者systemverilog。that's all。
有点偏题了,说楼主的问题:
你的错误:第一点,最明显的地方是 第二个always块里面,你同时用了阻塞赋值和非阻塞赋值语句,这是典型错误。时序逻辑的always块里面都用<=,组合逻辑的always块都用=。
第二,第二个语句中X,Y两个变量的赋值的表达式根本没办法正确综合,一般%这个运算符号只能出现在仿真里(也很少用)除法/只能对2的整数幂进行相除,根本不能除以10,因为这里除法的本质就是除以2^n就等同于讲寄存器的值左移n位;请问这里10等于2的几次幂啊?!
第三个错误,第一个always块,作为组合逻辑,要把所有的敏感变量加进敏感变量列表里,而且组合逻辑你就不用边缘检测posedge 了,直接always@(add or sub or grade)就可以了。
第四个错误。。你的这个组合逻辑的always块,else 语句写在else if 语句前面,这是一种很诡异的写法,能综合个什么东西出来完全想不出来。
所有,我给你的建议是,你这段程序直接推翻重新来写,全部使用标准的时序逻辑的写法,
就是你第二段“always@(posedge clk or negedge RSTn)beign……end”这种写法,它可以保证你的所有电路行为都是发生在时钟上升沿或异步复位下降沿。
其次,每个信号第一if的分支语句一定是要if (!RSTn),即RSTn为低电平时整个加法器复位。这样做的好处在于:由于所有FPGA器件自动上电的瞬间,内部各个信号的初始态都是低电平,可以保证系统有一个自动复位的过程,所有按照这样写的寄存器都会有一个初始态。而避免了不定态X。
最后,建议你四个bit位宽的个位寄存器做成一个模为10的计数器(可以加可以减,具体靠判断sub,add哪一个信号为高)。。每次计数器满时就将十位的那个寄存器加一,而当个位寄存器为零且又检测到sub减信号时,则把个位寄存器置为4‘b1001(9);将十位寄存器也减一;这样就可以实现总累加值从0~99的加减法器了 。
我记得只有滤波器可以的吧。
在fdatool里边有,将设计好的滤波器,先进性系数量化,然后在generate里面有hdl这一项的。选择以后就会调用filter
design
coder,进行设置就可以生成verilog代码和对应的tb了。
是fdatool生成的滤波器代码,是可综合的verilog代码。
你可以把它复制粘贴到quartus ii中进行综合,然后下载到FPGA/CPLD芯片上去,然后这块芯片就是一个数字滤波器了。
然而,虽说理论上这么 *** 作的,但实际上用quartus ii综合时候会遇到各种各样奇奇怪怪的错误和警告,很多时候需要费相当的心机去修改
Verilog是数字逻辑,智能检测0、或1的信号,对于正弦波或三角波,需要转换成数字信号才能处理。
不知道你的信号电压是多少,如果电压与FPGA的管脚电压相匹配,可以直接引入FPGA(这个方法在工程是是不允许的,因为正弦波或三角波延较缓,可能会损坏FPGA器件;工程上是需要经过波形整形,有相应的器件)。在FPGA内部,用高频时钟采样,如100MHz采样,然后做滤波。
如你的信号最高频率是5MHz,采样频率是100MHz,则如果检测到连续2个高电平,则是一个高电平;在连续检测到2个低电平后,转为低电平。
然后,你可以适用100MHz时钟对滤波后的信号做频率检测了。
低通滤波,你可以选择IP核,quartus2 70 版本以上内部集成了IP核,包括你需要的FIR滤波器,你可以直接使用,同时,你可以试试用一下dspbuilder,这是很灵活的工具,整合了matlab和quartus2,我做毕业设计用到低通滤波器就是用dspbuilder做的,可以自动生成vhdl语言供quartus2编译和下载,你值得一试
这个挺简单的,中值滤波:先做一个三输入比较器,再构成一个9输入求中值的结构,网上有篇文章有介绍<基于FPGA的图象滤波算法实现>,边缘检测有很多算法,直接套模板,搞懂了一个其他的有可以触类旁通.
以上就是关于求指导一个verilog编写的FPGA加减法程序全部的内容,包括:求指导一个verilog编写的FPGA加减法程序、怎样用matlab生成verilog代码、matlab中fdatool生成的verilog代码中那个两个代码具体是干什么用的啊。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)