EDA 电子设计自动化 - 北航计算机学院教学试验中心.PPT

EDA 电子设计自动化 - 北航计算机学院教学试验中心.PPT

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
EDA 电子设计自动化 - 北航计算机学院教学试验中心

参见教材P216【例9.2】 软件综合后的电路基本也是级连实现的,因此延时也比较大 参见教材P217【例9.3】 参见教材P217 可以看出,如果a和b都为1,则产生进位,cout=1;如果a或b有一个为1,则传播进位,cout=cin。 因此可以用G和P 来写出4位超前进位链:……——可以看出,各级进位彼此独立产生,与前级的进位输出无关,去掉了进位级连传播。 可以推出每一位的算术和(本位值):其中i=1~4。 参见教材P217【例9.3】 这里i=0~7,C[0]=cin; cout= C[8]= G7+P7C7; 注意本课件上程序比教材上【例9.3】描述物理意义更清晰,尽管二者仿真结果一样。 assign sum[4]=G[4]^P[4]^C[4];//教材上印刷错误,写成了assign sum[4]=G[2]^P[2]^C[2]; 延时比较小 流水线技术:在工厂的大批量生产中,将产品的生产过程分为若干个步骤,各个步骤同步进行,流水作业,这样来提高生产效率。比如啤酒灌装过程,分为灌装、盖瓶盖、装箱等步骤。流水线技术被广泛应用于计算机领域中。 将长延时逻辑分解为3个步骤,每一步的延时变为原来的三分之一;在各步之间插入寄存器 ,暂存中间结果,则3个步骤可以并行执行。当处理的数据很多时,采用流水线设计技术,可以有效提高整个系统的工作速度。 流水线设计的代价是增加了寄存器逻辑,即增加了芯片资源的耗用——但因为FPGA有丰富的寄存器资源,所以在FPGA的设计中采用流水线技术不会对资源造成多大影响。 流水线技术适于多对数据相加时提高系统工作速度 第1个时钟上升沿到来时,低4位相加,得到低4位的和及进位,未参加计算的数据(高4位)缓存;第2个时钟上升沿到来时,高4位与第1级加的进位相加,得到算术和的高4位sum[7:4]及进位cout;低4位的和即和的低4位sum[3:0] ,三者拼接,得到一对数的和sum及进位cout。 见adder8_pipe.v。第1个时钟上升沿到来时,低4位相加,高4位寄存;第2个时钟上升沿到来时,高4位与低4位相加所产生的进位相加 只需要2个时钟周期就可以完成第一对数的相加;当有多对数据相加时,由于两级全加器可以同时操作,所以平均来说,在1个时钟周期就可以完成一对数的相加。 源程序位于multiplier文件夹 参见教材P220【例9.5】 并行乘法器是纯组合逻辑,由逻辑门(与门、或门)实现。 若乘数的第i位为1,则被乘数左移i位,与上次的部分积结果相加。 由于移位相加乘法器每次需要先判断乘数的最低位是否为1,再逐次移位被乘数、再相加,所以运算速度慢 见mult8_shift_add.bdf。被乘数a左移子模块完成被乘数a左移;乘数b右移子模块完成乘数b的右移;sum子模块完成被乘数a左移后与部分积的相加;reg16子模块用于存储sum输出的结果,最后得到的即是两个数相乘的结果;控制逻辑子模块完成状态之间的转移,并控制其它子模块。 为观察状态机的变化,这里将状态机t[1:0]引出,作为输出信号。 控制逻辑子模块完成状态的转移,并产生使能其他子模块的控制信号EA、EB、EP、PSEL,以及运算完成标志DONE。 当乘数B全变为0时,Z=1;当乘数B不全为0时,Z=0 状态机的描述风格有多种,一种是采用3个进程(过程)分别描述状态的转移、状态寄存器和状态机输出;另一种可以采用2个进程分别描述状态的转移和状态寄存器(时序逻辑)、状态机输出(组合逻辑)。后者逻辑表述更清晰,也更简单,见multshift_cntrl_simple.v。二者仿真结果一样! 从仿真波形可以看出,当start从0变为1时,状态机t从起始状态S1跳转到下一状态S2,在此期间进行乘法运算;当乘数B全变为0时,状态机t从状态S2跳转到下一状态S3,同时输出done从0变为1,表示乘法运算完成。 如何用2个进程改写控制逻辑子模块?——一个进程(时序逻辑)用always @(posedge clock or negedge reset),另一个进程(组合逻辑)用always @(s or t or b0)。 在shifta子模块中,always 块中语句表示,在第一个时钟的上升沿,当l(Load A)有效时,加载数据A,寄存器q[15:0]中数据为0000_0000_a7 a6 a5…a0;当时钟的上升沿到来时,若e=1(使能本模块),则for循环表示对q[1]~q[15]重新赋值,q[15:0]中数据左移1位,变为0000_000 a7_a6 a5…a0_0;再来一个时钟,q[15:0]中数据继续左移1位,变为0000_00 a7 a6_a5…a0_00;……;第8个时钟到来时,q[15

文档评论(0)

wumanduo11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档