verilog语法学习心得(留着肯定有用)

上传人:小** 文档编号:62166215 上传时间:2018-12-17 格式:DOC 页数:9 大小:46.50KB
返回 下载 相关 举报
verilog语法学习心得(留着肯定有用)_第1页
第1页 / 共9页
verilog语法学习心得(留着肯定有用)_第2页
第2页 / 共9页
verilog语法学习心得(留着肯定有用)_第3页
第3页 / 共9页
verilog语法学习心得(留着肯定有用)_第4页
第4页 / 共9页
verilog语法学习心得(留着肯定有用)_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《verilog语法学习心得(留着肯定有用)》由会员分享,可在线阅读,更多相关《verilog语法学习心得(留着肯定有用)(9页珍藏版)》请在金锄头文库上搜索。

1、-verilog语法学习心得1.数字电路基础知识: 布尔代数、门级电路的内部晶体管结构、组合逻辑电路分析与设计、触发器、时序逻辑电路分析与设计2.数字系统的构成: 传感器 AD 数字处理器 DA 执行部件3.程序通在硬件上的执行过程: C语言(经过编译)-该处理器的机器语言(放入存储器)-按时钟的节拍,逐条取出指令、分析指令、执行指令4.DSP处理是个广泛概念,统指在数字系统中做的变换(DFT)、滤波、编码解码、加密解密、压缩解压等处理5.数字处理器包括两部分:高速数据通道接口逻辑、高速算法电路逻辑6.当前,IC产业包括IC制造和IC设计两部分,IC设计技术发展速度高于IC设计7.FPGA设计

2、的前续课程:数值分析、DSP、C语言、算法与数据结构、数字电路、HDL语言 计算机微体系结构8.数字处理器处理性能的提高:软件算法的优化、微体系结构的优化9.数字系统的实现方式: 编写C程序,然后用编译工具得到通用微处理器的机器指令代码,在通用微处理器上运行(如8051/ARM/PENTUIM) 专用DSP硬件处理器 用FPGA硬件逻辑实现算法,但性能不如ASIC 用ASIC实现,经费充足、大批量的情况下使用,因为投片成本高、周期长10.FPGA设计方法: IP核重用、并行设计、层次化模块化设计、top-down思想 FPGA设计分工:前端逻辑设计、后端电路实现、仿真验证11.matlab的应

3、用: matlab中有许多现成的数学函数可以利用,节省了复杂函数的编写时间 matlab可以与C程序接口 做算法仿真和验证时能很快生成有用的数据文件和表格 DSP builder可以直接将simulink模型转换成HDL代码,跳过了中间的C语言改写步骤12.常规从算法到硬件电路的开发过程: 算法的开发 C语言的功能描述 并行结构的C语言改写 verilog的改写 仿真、验证、修正 综合、布局布线、投入实用13.C语言改写成verilog代码的困难点: 并行C语言的改写,因为C本身是顺序执行,而不是并行执行 不使用C语言中的复杂数据结构,如指针 目前有将C语言转换成verilog的工具?14.H

4、DL HDL描述方法是从电路图描述方法演化来的,相比来说更容易修改 符合IEEE标准的有verilog HDL和VHDL VHDL由美国国防部开发,有1987和1993两个版本 verilog由cadence持有,有1995、2001、2005三个版本 verilog较VHDL更有前景:具有模拟电路描述能力、不仅可以开发电路还可以验证电路、门级以下描述比VHDL强 RTL级和门级的综合已经成熟,主要是注意行为级的综合结果,使用可综合的编程风格 SYSTEM VERILOG是VERILOG的一种延伸15.IP核的应用: 软核soft core: 功能经过验证的、可综合的、实现后门数在5K以上的H

5、DL代码 固核firm core: 功能经过验证的、可综合的、实现后门数在5K以上的电路结构编码文件,如edif,不可更改 硬核hard core: 功能经过验证的、可综合的、实现后门数在5K以上的电路结构版图,已带工艺参数,不可更改16.HDL语言综合后得到EDIF,这是一种标准电路网表 EDIF经过具体工艺库匹配、布局布线、延时计算后得到网表 EDIF不可更改,作为固核存在17.verilog特点: 区分大小写,所有关键字都要求小写 不是强类型语言,不同类型数据之间可以赋值和运算 /是单行注释 可以跨行注释 描述风格有系统级描述、行为级描述、RTL级描述、门级描述,其中RTL级和门级别与具

6、体电路结构有关,行为级描述要遵守可综合原则 门级描述使用门级模型或者用户自定义模型UDP来代替具体基本元件,在IDE中针对不同FPGA器件已经有对应的基本元件原语 18.verlog语法要点: module endmodule之间由两部分构成:接口描述和逻辑功能描述 IO端口种类: input output inout 相同位宽的输入输出信号可以一起声明, input3:0 a,b; 不同位宽的必须分开写 内部信号为reg类型,内部信号信号的状态: 0 1 x z, 3bx1=3bxx1 x/z会往左扩展 3b1=3b001 数字不往左扩展 逻辑功能描述中常用assign描述组合逻辑电路,al

7、ways既可以描述组合逻辑电路又可以描述时序逻辑电路,还可以用元件调用方法描述逻辑功能 always之间、assign之间、实例引用之间以及它们之间都是并行执行,always内部是顺序执行 常量格式: : 默认进制为10进制 默认位宽为32位 位宽是从二进制宽度角度而言的 由位宽决定从低位截取二进制数2hFF=2b11,通常由被赋值的reg变量位宽决定 parameter常用于定义延迟和变量位宽,可用常量或常量表达式定义 变量种类: wire reg memory IO信号默认为wire类型,除非指定为reg类型 wire可以用作任何输入输出端口 wire包括input output inou

8、t wire不带寄存功能 assign赋值语句中,被赋值的信号都是wire类型 assign之所以称为连续赋值,是因为不断检测表达式的变化 reg类型可以被赋值后再使用,而不是向wire一样只能输出,类似VHDL中的buffer端口 reg类型变量初始值为x (VHDL中初始值为本类型最小值,通常是0) always模块里被赋值的信号都必须定义为reg类型,因为always可以反复执行,而reg表示信号的寄存,可以保留上次执行的值 reg类型变量与integer变量不同,即使赋负值,实质上也是按二进制无符号数存储的,integer是有符号数 verilog中所有内部信号都是静态变量,因为它们的

9、值都在reg中存储起来了 memory型只有一维数组,由reg型变量组成 memory初始化只能按地址赋值,不能一次性赋值 1*256的memory写法: reg mema255:0 mema3=0; 不同位宽的变量之间赋值,处理之前都以被赋值的变量位宽为准扩展或截取 Aa:b 无论a b谁大,a总是实际电路的信号高位,b总是实际电路的信号低位 算术运算中如果有X值则结果为X for循环中的变量另外定义成integer,因为它不是实际信号,有正负;reg则以无符号数存在 = 和!=只比较0、1,遇到z或x时结果都为x (x在if中算做假条件),结果可能是1、0、x =和!=比较更加苛刻,包括x

10、和z的精确比较,结果可能是0、1 &的结果只有1b1或1b0两种, A&A的结果位宽则是与A相同的 1,0为 64h100000000,所以拼接运算中各信号一定要指定位宽 移位运算左移将保留 4b10001等于5b10000,右移则舍弃 4b0011等于4b0001 数字电路里位运算应用普遍,包括按位逻辑运算、移位运算、拼接运算、缩减运算 非阻塞式赋值=与阻塞式赋值= 阻塞:在同一个always过程中,后面的赋值语句要等待前一个赋值语句执行完,后面的语句被该赋值语句阻塞 非阻塞:在同一个always过程中,非阻塞赋值语句是同时进行的,排在后面的语句不会被该赋值语句阻塞 =: 块结束后才能完成赋

11、值 块内所有=语句在always块结束时刻同时赋值 =右边各变量的值是上一次时钟边沿时,这些变量当时的值 用于描述可综合的时序电路 =: =语句结束之后过程always才可能结束 在always过程中,begin end块内按先后顺序立即赋值,在fork join内同时赋值(可能造成冲突) 与assign连用描述组合电路 begin end中阻塞的含义:begin .(A) B=C.; end 如果A事件不发生则永远不能执行下去,被阻塞了 由于时钟的延时(往往在ps级),多个always(posedge)之间究竟谁先执行是个未知数 使用原则:同一个always过程块内建立时序电路用= 纯组合逻

12、辑电路用=,生成的电路结构最简单,执行速度最快 同一个always块内不要混用=和= 不要在多个always块内对同一个变量赋值(多源驱动) if else的三种形式,第三种形式适合描述优先编码器 if条件中0/x/z当成假,1当成真,非0的数值也当成真 case语句的三种: case(四种状态的比较) casez(忽略z) casex(忽略x和z,只看哪些位的信号有用) case语句中所有表达式值的位宽必须相等,default中不能将nbx用bx代替 避免生成锁存器的方法: 电平触发时if后加else case中加default ? 使用casex会将不必要的状态视为无关项,使得综合出来的电路最简单 两种特殊的括号: begin 顺序语句. end fork 并行语句. join,其差别在于块内语句的起止时间、执行顺序、相对延时 块被命名后,其内部变量可以被调用,因为变量都是静态的(调用信号:对应电路中的一个信号线被引到另一处) initial块只无条件执行一次 always块在满足条件时不断执行 initial常用来写测试文件, always块常用来写电路描述 always既可以描述组合逻辑电路又可以描述时序逻辑电路 always如果后面有敏感信号列表则不

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号