版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
集成电路EDA插入说明1SoC硬件设计相关语言八位加法器的VerilogHDL源代码moduleadder8(cout,sum,ina,inb,cin);
output[7:0]sum;
outputcout;
input[7:0]ina,inb;
inputcin;
assign
{cout,sum}=ina+inb+cin;endmodule准备实现的逻辑功能∑888cicocincoutinainbsum简单的VerilogHDL的例子程序为模块结构,包含在module与endmodule之间端口列表输入、输出端口描述--描述外部特性逻辑功能描述--描述内部特性模块名模块的概念模块是VerilogHDL语言的基本单元,数字系统用模块集合的形式来描述模块描述某个设计的功能、结构和与其它模块通信的外部端口VerilogHDL中各个模块是并行运行的模块可以调用其它模块的实体(实例)数字IC设计方法VHDL简介module<模块名>(<端口列表>)
端口说明(input,output,inout)参数定义//可选数据类型定义//wire、reg、task、function连续赋值语句(assign)//组合逻辑过程块(always和initial)-行为描述语句低层模块实例//调用其它模块任务和函数延时说明块endmodule模块注意模块的名称DFF,端口列表及说明模块通过端口与外部通信端口在模块名字后的括号中列出端口可以说明为input,output及inout端口等价于硬件的引脚(pin)端口moduleDFF(d,clk,clr,q,qb);....endmodulemoduleREG4(d,clk,clr,q,qb);output[3:0]q,qb;input[3:0]d;inputclk,clr;DFFd0(d[0],clk,clr,q[0],qb[0]);DFFd1(d[1],clk,clr,q[1],qb[1]);DFFd2(d[2],clk,clr,q[2],qb[2]);DFFd3(d[3],clk,clr,q[3],qb[3]);endmoduleREG4有模块DFF的四个实例实例modulefull_add5(a,b,cin,sum,cout);inputa,b,cin;outputsum,cout;regcout,m1,m2,m3;//在always块中被赋值的变量应定义为reg型wires1;xorx1(s1,a,b);//调用门元件always@(aorborcin)//always块语句beginm1=a&b;m2=b&cin;m3=a&cin;cout=(m1|m2)|m3;endassignsum=s1^cin;//assign持续赋值语句endmoduleVHDL简介模块的概念可综合设计(程序)可综合指的是所设计的代码能转化为具体的电路网表。综合就是将VerilogHDL语言转化为门级电路网表的过程。不可综合设计则主要用于设计的仿真。逻辑综合=翻译+优化+映射可综合/不可综合1.综合工具支持的语句:always,assign,begin,end,case,wire,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,if,inout,input,module,negedge,posedge,output,defparam,parameter……2.综合工具不支持的语句:time,$stop,fork,join,initial,delays,wait……其他不可综合的情况1.敏感列表里同时带有时钟的posedge和negedge如:always@(posedgeclkornegedgeclk)
不可综合。2.同一个reg变量被多个always块驱动。3.以#开头的延时不可综合成硬件电路延时,综合工具会忽略所有延时代码,但不会报错。
如:a=#10b;这里的#10是用于仿真时的延时,在综合的时候综合工具会忽略它,等同于a=b;4.与不定态X、高阻态Z的比较。
如
if((b==1’bz)||(b==1’bx))begin不可综合。设计准则要保证VerilogHDL语句的可综合性,在建模时应注意:
1.不使用initial。
2.不使用#延时。
3.不使用循环次数不确定的循环语句,如while。
4.不使用用户自定义原语(UDP元件)。
5.除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。6.用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号或使用*代替。
7.描述时序逻辑,应使用非阻塞赋值(<=)方式。描述组合逻辑,应采用阻塞赋值(=)。
8.不能在一个以上的always过程块中对同一个变量赋值。9.如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。
10.避免混合使用上升沿和下降沿触发的触发器。设计准则(续)设计准则
敏感列表敏感表不完全:modulesens(a,q,b,sl);inputa,b,sl;outputq;regq;always@(sl)beginif(!sl)q=a;elseq=b;endendmodule完全的敏感列表modulesensc(q,a,b,sl);inputa,b,sl;outputq;regq;always@(sloraorb)或者@(*)beginif(!sl)q=a;elseq=b;endendmodule在下面的例子,a,b,sl是块的输入。sl用作条件,a、b用在过程赋值语句的右边。将块的所有输入都列入敏感表是很好的描述习惯。不同的综合工具对不完全敏感表的处理有所不同。有的将不完全敏感表当作非法。其他的则产生一个警告并假设敏感表是完全的。在这种情况下,综合输出和RTL描述的仿真结果可能不一致。完全的条件语句modulecompcase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)case({a,b})2'b11:e=d;2'b10:e=~c;2'b01:e=1'b0;2'b00:e=1'b1;endcaseendmodulemodulecompif(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)if(a&b)e=d;elseif(a&~b)e=~c;elseif(~a&b)e=1'b0;elseif(~a&~b)e=1'b1;endmodule例中定义了所有可能的选项,综合结果是纯组合逻辑,没有不期望的锁存器产生。Case
完全条件语句if
完全条件语句不完全条件语句moduleinccase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)case({a,b})2'b11:e=d;2'b10:e=~c;endcaseendmodulemoduleincpif(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)if(a&b)e=d;elseif(a&~b)e=~c;endmodule在上面的例子中,当a变为零时,不对e赋新值。因此e保存其值直到a变为1。这是锁存器的特性。若a变为0,e
为何值Case
不完全条件语句if
不完全条件语句modulecompif(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)if(a&b)e=d;elseif(a&~b)e=~c;
else
e='bx;endmodulemodulecomcase(a,b,c,d,e);inputa,b,c,d;outpute;rege;always@(aorborcord)case({a,b})2'b11:e=d;2'b10:e=~c;
default:e='bx;endcaseendmoduledefault,else完全条件语句
综合工具将’bx作为无关值,因此if语句类似于“fullcase”,可以进行更好的优化。例中没有定义所有选项,但对没有定义的项给出了缺省行为。同样,其综合结果为纯组合逻辑——没有不期望的锁存器产生。阻塞或非阻塞使用的赋值类型依赖于所描述的逻辑类型:在时序块RTL代码中使用非阻塞赋值。
非阻塞赋值语句之间是并行处理的,没有先后顺序。在组合的RTL代码中使用阻塞赋值。
阻塞赋值语句之间按先后顺序执行。阻塞、非阻塞对比modulebloc(clk,a,b);inputclk,a;outputb;regy;regb;always@(posedgeclk)beginy=a;b=y;endendmodulemodulenonbloc(clk,a,b);inputclk,a;outputb;regy;regb;always@(posedgeclk)beginy<=a;b<=y;endendmodule使用阻塞赋值,此描述综合出一个Dflip-flop:不建议使用非阻塞赋值,此描述将综合出两个DFlip-flop。资源共享资源共享是指多节代码共享一组逻辑。例如:always@(aorborcord)if(a)out=b+c;elseout=b+d;没有资源共享资源共享资源共享与所用综合工具有关。但通常,要共享资源,表达式必须在同一个always块中的同一个条件语句中。括号的作用利用括号分割逻辑。z=a+b+c+d;z=(a+b)+(c+d);+ab+c+zd+ab+cd+z目前综合工具可以自动优化成下图的形式。数字IC设计流程综合系统定义HDL代码编写功能验证布局布线流片综合前端设计后端设计为什么需要验证?1.语法检查moduleclk_devider(clk,en,data_in,clk_d7,clk_d8,clk_out,);inputclk,en;data_in;outputclk_d7,clk_d8,clk_out;wire[2:0]count;wireclk_d8,clk_out;regclk_d7;assignclk_out=data_in?clk_d8:clk_d7;assignclk_d7<=~count[2];assignclk_d8=~count[2];always@(posedgeclk)if(!en)count<=0;elseif(en)if(!data_in)count=count+1;elsebeginif(count==6)count<=0;elsecount<=count+1;endmodule端口申明结束变量类型错误reg类型变量不能使用连续赋值同一过程块赋值类型要一致,reg类型最好使用“<=“非阻塞赋值begin—end要匹配为什么需要验证?(续)2.功能验证assigntest=~a|(b&c);如果a=0,b=1,c=0,test=?验证的必要性经验表明,验证已经占到整个产品开发周期的70%以上,它已经成为复杂SoC开发中的重要壁垒。Verificationishard
没有一个简单的工具可以解决你所有的验证问题。如何验证?1.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023-2024学年湖北孝感安陆市七年级(下)期末数学试卷及答案
- 场内车辆行驶管控细则
- 2026年重庆市高考真题政治试题试卷答案解析
- 保理业务预警数据存储与备份制度
- 油库应急救援智能化指挥系统建设指南(2026 版)
- 环保技术咨询服务合同三篇
- 2026年山西省机电专业机械设计基础模拟试卷
- 2026年初中成语故事《金声玉振》孟子孔子评价教案
- 项目6 跨境电商数据分析
- 2026年初中《未雨绸缪》成语故事教学教案
- JG/T 368-2012钢筋桁架楼承板
- 道县离婚协议书
- 婴幼儿回应性照护
- 铝单板别墅外墙施工合同
- 河北省特种设备安全风险分级管控与 隐患排查治理指导手册
- 机床数控技术PPT完整全套教学课件
- 人教版九年级化学全册笔记(史上最全)
- GB/T 39673.1-2020住宅和楼宇电子系统(HBES)及楼宇自动化和控制系统(BACS)第1部分:通用要求
- GB/T 15820-1995聚乙烯压力管材与管件连接的耐拉拔试验
- 供应链管理课件三
- 《劳动经济学》教学大纲
评论
0/150
提交评论