求指导一个verilog编写的FPGA加减法程序

求指导一个verilog编写的FPGA加减法程序,第1张

首先纠正下千年同志的回答:

你的第一点,请看清楚楼主两个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的加减法器了 。

SCE-MI(标准协同仿真建模接口)是一个Accellera的标准,有利于标准化软件模型和硬件平台之间的事物级层次的通信。通过使用SCE-MI连接基于FPGA的原型设计模型以及PC中的设计模型或test bench, SoC设计师可以大大提高验证效率,并实现早期的硬件软件协同设计。然而,由于SCE-MI的基础结构以及与SCE-MI相匹配的可综合事务级处理模型的复杂性,C - API也是一个很好的替代方案,这样的应用,大大降低了成本。让我们来看看怎样通过使用SCE-MI建立一个仿真环境和基于FPGA的原型之间的软硬件协调仿真环境,并比较一下SCE-MI和C-API

在FPGA原型上运行 SCE-MI

SCE-MI允许使用者连接他们FPGA设计到C,C++ 和SystemC。除此之外,设计者使用更高级别的C-API,还可以让FPGA上的设计与指令级仿真器,如Armulator连接起来。

有时设计人员会在开发的早期使用SystemC模型作早期的设计,在这种情况下,他们可以把部分SystemC的模型放到基于PC的软件工具里,其他设计放到基于FPGA的电子系统级的平台中。模型不同的组成部分可以通过基于Accellera标准的SCE-MI接口和可综合的Transactor在事务级进行数据交换。

连接基于FPGA的电子系统级和PC上高层设计模型使得使用者无需拥有所有的IP模块就能实现完整的架构验证。由于数据在PC和FPGA硬件的事务级传输,大部分的设计都可以在MHz范围的速度下运行。

这种把基于FPGA和基于软件的电子系统级设计链接起来的方法的另一个好处是,它可以解决原型的速度不能够完全匹配外部真实环境的问题。例如,千兆以太网的FPGA原型很难以与周边环境同样的速度运行,那么设计者就可以通过SCE-MI接口使用PC上高层模型与FPGA上设计进行软硬件协同建模仿真来解决。

另一种方法:C-API

S2C的C-API功能可让验证工程师们发送/接收电脑中的大量测试数据到/从基于FPGA的原型设计。通过和许多验证工程师交谈,我发现当今的一个共同的挑战在于:创建足够的测试案例和一些极端案例以彻底验证基于FPGA的原型设计的能力。通过把原型连接到目标系统,工程师们能够进入真实世界测试环境,但是通常难以创建真实世界环境的极端测试案例。因此,较好的设计方法是为真实世界测试环境补充能够从电脑运行的、基于FPGA的原型的额外验证数据。S2C的C-API 非常适用于以下用途:

◆ 从电脑运行大量验证数据到基于FPGA的原型进行验证。

◆ 验证极端案例在真实世界目标系统中难以创建,但是可以在模拟或者软件中创建。

◆ 真实目标系统接口由于速率太快而无法在基于FPGA的原型上实现,因此利用电脑产生较低速率的测试。

◆ 读取和写入FPGA系统的存储器,以便加载启动代码或者抓拍系统状况的照片。

S2C的C-API是S2C TAI Player Pro软件的一项可选功能,它需要S2C基于FPGA的原型硬件支持TAI VM技术。图2表展示了TAI Verification Module (VM)通过一个x4 PCIe Gen 2接口和计算机通信。这块TAI VM插在了一个能容纳328M ASIC门的Quad Stratix-4 820 TAI Logic Module(LM)上

C-API对比SCE-MI

SCE-MI可能是把计算机测试环境连接到仿真器和基于FPGA的原型等硬件辅助验证平台的唯一著名标准。S2C是SCE-MI标准的倡导者,并且已经完成了许多客户的SCE-MI项目。我个人认为,使用C-API对目前大多数设计要求来说也是一个好的简单替代方案。SCE-MI需要严格的连接基础架构以及更重要的与SCE-MI兼容的Transactor。因此,创建SCE-MI原型环境的成本和时间就变得更高更长。当然,一些SOC设计者仍然偏好SCE-MI,因为SCE-MI有严格的规则来规定怎样对复杂接口协议建模,并且SCE-MI将来可为交叉软件和硬件平台验证提供支持。

以下我将列出使用S2C的C-API的优点:

1)易于使用。S2C的硬件侧接口采用OpenCore的叉形总线结构。客户可以轻易把接口设置为任何其他总线的接口或者直接连接到设计块或存储器块。而在PC端,我们提供一套用于读写和DMA传输的C-API程序。

(下转第87页)

2)高性能。只需很少的日常管理开销,并且可以在几乎接近20Gbps的数据传送速率下运行。

3)低成本。其设置成本仅为SCE-MI设置成本的一小部分。

4)SCE-MI标准尚未被广泛采用。市场上可提供的SCE-MI Transactor数量有限。

总结

从电脑上通过大量验证数据快速运行基于FPGA的原型,这种能力可以为工程师们提供充分验证ASIC/SoC设计的更好方式。SCE-MI和C-API都可以实现这种能力。如果交叉软件和硬件平台不是现今所关注的重点,我推荐使用C-API。

作者简介

吴滔,S2C公司应用工程总监。

计算机硬件描述语言(VHDL)与编程语言(C语言)的区别及关系,

首先说VHDL:它是描述电路的计算机工具,早期的CPLD等器件是基于与-或阵列的,更容易说明这点,VHDL是描述电路行为的,当下载到器件后,它就是具体的电路,这个电路全由与-或阵列组成。后期的FPGA也一样,只是它是基于查找表的。再说C语言:我们可以认为它是用于控制特定电路的工作。我们都知道可以C编程的控制器都有程序存储器,它里面就存放了C编译后的二进制代码。而VHDL里下载后根本就不需要这个存放程序的地方。

硬件描述语言与高级编程语言有何区别?

用途不一样

VHDL等硬件描述语言主要用于CPLD、FPGA的大规模可编程逻辑器件

而C语言等高级编程语言主要用于计算机等方面

软件编程语言和硬件描述语言的差别?

verilog hdl 的程序烧到芯片里会影响芯片里的电路结构吧~ C编译成机器码以后一般都是在通用计算机上跑~这个问题很大有点不知道从何说起,老衲尽力了

VHDL硬件描述语言和汇编语言有什么关系吗?

做单片机方面,汇编语言是必学的,虽然单片机编程所用的大部分是C语言!

VhdL语言是针对FPGA和CPLD的硬件描述语言,两者没多大共同点,是针对两个不同领域的语言!

学习单片机后,你可以往ARM和DSP方向发展!现在电子的一个大方向

你也可以单独学习VHDL,将FPGA学懂,那么你就是兼顾电子两大类的最尖端人才了!

VHDL代码是标准的硬件描述语言这句话怎样理解?何谓硬件描述语言?

VHDL说简单点 就是你用你心里面想的话去描述电路 让CPLD /FPGA去实现 是用来描述电路的 所以说叫硬件描述语言 自己的理解 希望能帮到你

VHDL硬件描述语言的延迟语句是什么?

VHDL每一条语句最终生成的是一堆电路,记得是一堆实实在在的电路,不是生成一堆来执行什么功能的程序 所以不存在什么延时问题,所谓的延时,只是输入到输出的延时,执行语句的耗时那是不存在这种说法的

现在学硬件描述语言,VHDL好还是Verilog好

初学者我感觉因为有C语言基础,Verilog的话比较容易上手,语法比较像。但是不要因此而轻视它,有些地方是初学者很难理解的比如阻塞式赋值和非阻塞式赋值等。

谁能介绍一下"硬件描述语言VHDL"

硬件描述语言HDL是一种用形式化方法描述数字电路和系统的语言。利用这种语言,数字电路系统的设计可以从上层到下层(从抽象到具体)逐层描述自己的设计思想,用一系列分层次的模块来表示极其复杂的数字系统。然后,利用电子设计自动化(EDA)工具,逐层进行仿真验证,再把其中需要变为实际电路的模块组合,经过自动综合工具转换到门级电路网表。接下去,再用专用集成电路ASIC或现场可编程门阵列FPGA自动布局布线工具,把网表转换为要实现的具体电路布线结构。

目前,这种高层次(high-level-design)的方法已被广泛采用。据统计,目前在美国硅谷约有90%以上的ASIC和FPGA采用硬件描述语言进行设计。

硬件描述语言HDL的发展至今已有20多年的历史,并成功地应用于设计的各个阶段:建模、仿真、验证和综合等。到20世纪80年代,已出现了上百种硬件描述语言,对设计自动化曾起到了极大的促进和推动作用。但是,这些语言一般各自面向特定的设计领域和层次,而且众多的语言使用户无所适从。因此,急需一种面向设计的多领域、多层次并得到普遍认同的标准硬件描述语言。20世纪80年代后期,VHDL和Verilog HDL语言适应了这种趋势的要求,先后成为IEEE标准。

现在,随着系统级FPGA以及系统芯片的出现,软硬件协调设计和系统设计变得越来越重要。传统意义上的硬件设计越来越倾向于与系统设计和软件设计结合。硬件描述语言为适应新的情况,迅速发展,出现了很多新的硬件描述语言,像Superlog、SystemC、Cynlib C++等等。究竟选择哪种语言进行设计,整个业界正在进行激烈的讨论。因此,完全有必要在这方面作一些比较研究,为EDA设计做一些有意义的工作,也为发展我们未来的芯片设计技术打好基础

可编程硬件描述语言主要包括哪俩种

VHDL和Verilog HDL

VHDL:

功能强大、设计灵活

支持广泛、易于修改

强大的系统硬件描述能力

独立于器件的设计、与工艺无关

很强的移植能力

易于共享和复用

Verilog HDL:Verilog来自C 语言,易学易用,编程风格灵活、简洁,使用者众多,特别在ASIC领域流行;

在VHDL硬件描述语言中,architectures的功能是什么

architecture是定义的结构体,定义了实体后就需要定义结构体

systemclib没有链接上,下面方法试试: 1、依次点击菜单项Project->setting->link选项卡,在Object/library modules中添加systemclib 2、依次点击菜单项Tool->Options->Directories选项卡,Show directories for选择Library files,在下面的列表里把systemclib所在目录添加到里面。 3、Clear后重新编译 如果上面不行的话,把列表里systemclib所在目录向上提下优先级,再执行第3步。

以上就是关于求指导一个verilog编写的FPGA加减法程序全部的内容,包括:求指导一个verilog编写的FPGA加减法程序、[使用SCE-MI和C-API来提高基于FPGA的SoC/ASIC原型验证效率]怎么提高语C、计算机硬件描述语言(VHDL)与编程语言(C语言)的区别及关系,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9827334.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存