Verilog HDL 基本语法 STEP 2016/12/3.

Slides:



Advertisements
Similar presentations
2014 年浙江省数量资料 华图网校 刘有珍 数字推理 年份题量数字规律 三级等差 2. 和递推 3. 幂次修正 4. 倍数递推 5. 倍数递推 6. 特殊差级 7. 倍数递推 8. 倍数递推 9. 积递推 10. 分数数列
Advertisements

現代殺手心血管疾病 書田診所家醫科主任 何一成 陽明大學醫學士 陽明大學傳統醫學碩士
大公教育行政职业能力测验讲义 邢长文老师. Page 2 大公教育全国客服热线:
用印度数学提高计算速度 段志强. 讲义大纲 速算基础 充满智慧的印度数学 印度数学的十类快速计算 复习和测验 综合应用及思考.
龙泉护嗓5班 优秀作业展.
九十五年國文科命題知能 研習分享.
說 劍 《莊子‧雜篇》─ 第 一 組 賴泊錞 謝孟儒 張維真 羅苡芸
湘雅医院中层干部培训讲座之二 医院行政管理工作思路 孙 虹 2010年10月27日.
高职院校建设与发展的良好契机 —努力搞好人才培养工作水平评估工作
高职高专院校人才培养工作水平评估指标体系解读
2013届高考复习方案(第一轮) 专题课件.
人民版必修三专题三复习 近代中国 思想解放的潮流 灵石中学 易吉华.
专题二 文学类文本·小说阅读(选考) ——把握人事,洞察百态 补上一课 如何读懂小说 第1讲 情节 第2讲 人物 第3讲 环境 
第十六专题 近代以来世界的科学 技术和文学艺术
第二章 复式记账原理*** 主要内容、重点难点: 1.会计要素与会计等式*** 2.会计科目与账户*** 3. 借贷记账法***
第二单元 生产、劳动与经营.
工職數學 第三冊 第二章 不等式與線性規劃 ‧2-1 一元二次不等式 ‧2-2 絕對值不等式 ‧2-3 二元一次不等式的圖形
1、分别用双手在本上写下自己的名字 2、双手交叉
2011年广西高考政治质量分析 广西师范大学附属外国语学校 蒋 楠.
1.6 中国人口迁移.
愛之花.
用“自言自语法”提高学生 英语口头表达能力 李奉栖.
知识回顾 1、通过仔细观察酒精灯的火焰,你可以发现火焰可以分为 、 、 。 外焰 内焰 焰心 外焰 2、温度最高的是 。
2007年11月考试相关工作安排 各考试点、培训中心和广大应考人员:
知识点一 第一节 理解教材新知 知识点二 区域的基本含义 知识点三 考向一 把握热点考向 考向二 随堂基础巩固 应用创新演练 课时跟踪训练
分式的乘除(1) 周良中学 贾文荣.
交通事故處置 當事人責任與損害賠償 屏東縣政府警察局交通隊.
忠孝國小自立午餐老師的叮嚀 教師指導手冊.
歌仔戲 與 歌舞伎 4a 張淇惠 4a11b025 許巧嬑 4a 倪曼凌 4a1c0004 楊長梵
第四章 制造业企业 主要经济业务核算.
物理精讲精练课件 人教版物理 八年级(下).
《思想品德》七年级下册 教材、教法与评价的交流 金 利 2006年1月10日.
华东师范大学 软件工程硕士答辩名单 时间:2016年5月14日、15日.
财经法规与会计职业道德 (3) 四川财经职业学院.
请同学们思考下列问题:.
2 分子的热运动.
Chapter 5 Sequential Logic Circuit
面向海洋的开放地区——珠江三角洲 山东省高青县实验中学:郑宝田.
 第20讲 中国的交通.
第十二单元 第28讲 第28讲 古代中国的科技和文艺   知识诠释  思维发散.
成才之路 · 地理 人教版 · 必修3 路漫漫其修远兮 吾将上下而求索.
第1节 光的干涉 (第2课时).
苏教版小学数学六年级(下册) 认识正比例的量 执教者:朱勤.
第十三章 收入和利润.
狂賀!妝品系同學美容乙級通過 妝品系三甲 學號 姓名 AB 陳柔諺 AB 陳思妤 AB 張蔡婷安
第10章 Verilog操作符 学习内容: 熟悉Verilog语言的操作符.
Chapter 5 Verilog 硬體描述語言
Chapter 5 Verilog硬體描述語言
Ch01-2 Verilog語法 資料流(DataFlow)設計 行為(Behavior)設計
第17章 Verilog中的高级结构 学习内容: 任务和函数的定义和调用 怎样使用命名块 怎样禁止命名块和任务 有限状态机(FSM)及建模.
EDA技术 廖义奎.
第四阶段实验 ISP器件的设计与应用 一、实验目的 二、实验内容与要求 三、ISP器件的开发流程 四、EDA Pro2K实验系统介绍
如何寫工程計畫書 臺北市童軍會考驗委員會 高級考驗營 版.
Verilog硬件描述语言基础.
语法进阶.
时序电路设计 刘鹏 浙江大学信息与电子工程系 Apr. 24, 2011 EE141
数字集成电路设计入门 --从HDL到版图 于敦山 北大微电子学系.
精简指令集(RISC)CPU的构造原理和设计方法
第14章 对验证的支持 学习内容 理解Verilog文本输出 理解不同的读取仿真时间的系统函数 理解 Verilog文件I/O功能.
计算机学院 数字逻辑实验的要求.
计算机EDA设计 教 程 北航计算机学院 艾明晶.
電子白板百萬小學堂 本活動建議搭配電子白板 學生最多可分成2~6組(請按組別按鈕) 老師可以視時間多少,來進行活動 每一組要回答十個問題。
设计示例一 用门级结构描述D触发器:.
线段 射线 直线.
1.理解力和运动的关系,知道物体的运动不需要力来维持。
坚持,努力,机会留给有准备的人 第一章 四大金融资产总结 主讲老师:陈嫣.
美丽的旋转.
FPGA组合逻辑 王安然.
按键处理部分 王安然.
第三章 植物的激素调节.
Presentation transcript:

Verilog HDL 基本语法 STEP 2016/12/3

目录 Verilog HDL语言的特点 Verilog HDL语言的描述方式 模块与端口 注释 常量,变量与逻辑值 操作符 操作数 参数 编译指令 程序实例

Verilog HDL语言的特点 Verilog HDL是一种用于数字逻辑电路设计的硬件描述语 言,具有下列特点: 互连:互连是硬件系统中的一个基本概念,Verilog语言中的wire 变量可以很好地表达这样的功能;而软件语言并没有这样的描述。

Verilog HDL的描述方式 Verilog HDL采用三种描述方式来进行设计: 数据流描述:采用assign语句,连续赋值,数据实时变化,赋值 对象一般定义为wire型。 行为级描述:使用always或者initial语句,过程赋值,赋值对象一 般定义为reg型,不一定会形成寄存器。 结构化模型:通过实例化已有的功能模块来建模。 在一个设计中我们往往会混合使用这三种描述方式。 Verilog HDL是对大小写敏感的语言,同样的词汇,大写和小写是 不同的符号。 关键字都是小写的。

Verilog 的四种逻辑值 0、低、伪、逻辑低、地、VSS、负 1、高、真、逻辑高、电源、VDD、正 X、不确定:逻辑冲突无法确定其逻辑值 1 X Z buf bufif1 0、低、伪、逻辑低、地、VSS、负 1、高、真、逻辑高、电源、VDD、正 X、不确定:逻辑冲突无法确定其逻辑值 HiZ、高阻抗、三态、无驱动源

Verilog编程案例

Verilog编程结构 module 模块名称(端口列表); //端口定义声明; input, output, inout //内部变量及参数声明 wire, reg, functioion, task, parameter, define, etc //模块功能实现 数据流描述: assign 行为级描述:initial, always 结构化描述: module例化 其他用户原语 endmodule

Verilog编程结构介绍 模块是Verilog的基本描述单元,可大可小,大到一个复杂的系统, 小到一些基本的逻辑门单元,主要用来描述某个设计的功能或结 构及其与其他功能模块通信的外部端口。 对于模块而言,需要有一个模块名称来标示模块,在端口列表的 括号后面一定要以 “;”结束。 模块一般都有端口列表,端口与端口之间用 “,”隔开。但是仿 真语言没有端口列表,因为仿真是一个封闭的系统,端口已经实 例化在内部。 端口声明部分需要声明端口的方向和位宽。

Verilog编程结构介绍 尽管信号和内部变量定义声明只要出现在被调用的语句之前就行, 可是代码风格一般要求在执行语句之前就定义好,这样可以提高 代码的可读性。 在声明后,便是功能执行语句,功能执行语句包括always语句、 initial语句、assign语句、task、function、模块例化等等。可以 混合描述,没有先后顺序,但是要注意的是initial语句只能用于仿 真程序中,不能生成实际的电路。 任何一个模块都要以 “endmodule”结束。

模块和端口 例 端口声明 //Port Declaration input [4:0] a; // 信号名为a的5输入信号 例 端口声明 //Port Declaration input [4:0] a; // 信号名为a的5输入信号 inout b; // 双向信号b output [6:0] c; // 信号名为c的7输出总线信号

模块和端口 有些设计会把端口的声明部分和端口列表写在一起,在端口中可 以对每个信号进行注释。 module counter( input clk, //全局时钟信号 input reset_l, //全局复位信号 output [7:0] cnt //八位数据总线 );

常用数据类型 线网数据类型: wire型的线网是不具备数据存取 功能的 定义为wire型的线网是不能够在 always语句中被赋值的,只能被 连续赋值。

常用数据类型 寄存器数据类型: reg型的则可以存取最后一次赋 给它的值, 定义为reg型的线网只能在 always和initial语句中被赋值, 不能被连续赋值。

数据类型的选择 对于模块而言: 输入变量都是线网类型的 输出变量可以是线网类型的,也可以是寄存器类型的

线网型与寄存器型赋值区别 ①用assign声明语句 如:assign c = a&b; ②用always块 如:always@(posedge clk) c <= a&b; 例子描述了一个与门,但是只有在clk上升沿(posedge)时候a与b才 会进行与。

线网型与寄存器型赋值区别 clk a b assign c always c

常用数据类型 参数数据类型: reg型的则可以存取最后一次赋给它的值, 定义为reg型的线网只能在always和initial语句中被赋值,不能被连 续赋值。

常量表示 常量就是不变的数值,比如说4’d8,表示的是一个4位宽的十进 制整数8。 在Verilog中,有三种不同类型的常量:整数型、实数型以及字符 串型。 整数型常量可以直接使用十进制的数字表示。 基数表示法的格式如下: 长度’+数制简写+数字 当设定的位宽比实际数字的位宽少,则自动截去左边超出的位数, 反之则在左边不够的位置补足0。如果长度不显示,那么数字的位 宽则取决于本身的长度。 注意:这里说的长度或位宽表示数值在二进制形态下的位宽

与C语言相似 操作符 Verilog HDL语言和C语言相似,有丰富的各种操作符,总体分为8 类,如下: 算术运算符 关系运算符 逻辑运算符 条件运算符 位运算符 移位运算符 赋值运算符 拼接运算符 与C语言相似

算数运算符 cnt_main <= cnt_main + 1'b1;

关系运算符 if(cnt_main >= 4'd6) cnt_main <= 4'd5;

逻辑运算符 if(!rst_n_in) cnt_main <= 4'd0; 操作符 表达式 描述 && A&&B A,B是否都为真? || A || B A,B任意一个是否为真? ! ! B B是否为假 if(!rst_n_in) cnt_main <= 4'd0;

逻辑运算符实例 A = 3; //参数A B = 0; //参数B C = 2'b0x; //参数C D = 2'b10; //参数D C&&D = X

条件运算符 assign seg_dot_1 = (mode_flag==3'b100)? 1'b1:1'b0; assign data = (mode_flag==3'b100)? hour:((mode_flag==3'b010)? min:sec);

位运算符 if(cnt_200khz >= CNT_NUM-1) clk_200khz <= ~clk_200khz; 操作符 表达式 描述 ~ ~B 将B中的每一位取反 & A & B 将A中的每位与B中对应的位相与 | A | B 将A中的每位与B中对应的位相或 ^ A ^ B 将A中的每位与B中对应的位异或 ~^ A ~^B 将A中的每位与B中对应的位相异或非 ^~ A^~B if(cnt_200khz >= CNT_NUM-1) clk_200khz <= ~clk_200khz;

位运算符实例 A = 4’b1011 B = 4’b1101 C = 4’b10x1 ~A =4'b0100 A&B =4'b1001 A&C =4'b10x1

移位运算符 always sys_clk = #(CLK_PERIOD>>1) ~sys_clk;

归约运算符 操作符 表达式 描述 & &B 将B中的每一位相与得出一位的结果 ~& ~& B 将B中的每个比特相与非得出一比特的结果 | ~| ~| B 将B中的每个比特相或非得出一比特的结果 ~^ ~^B 将B中的每一位相异或非得出一比特的结果 ^~ ^~B ^ ^B 将B中的每一位相异或得出一比特的结果

归约运算符实例 B = 4’b1101 &B = 1&1&0&1 = 1'b0 |B = 1|1|0|1 = 1'b1

拼接运算符 if(sec_pulse)mode_flag <= {mode_flag[0],mode_flag[2:1]}; 操作符 表达式 描述 {} {A,B} 将A和B连接起来,产生更大的向量 {{}} {B{A}} 将A重复B次 if(sec_pulse)mode_flag <= {mode_flag[0],mode_flag[2:1]};

拼接运算符实例 A = 2'b00; //参数A B = 2'b10; //参数B {A,B} = 4'b0010

<, <=, >, >= 各种运算符优先级 操作符 级别 +,-, !,~(一元) 最高级 *,/,% 二元的加减 +,- <<, >> <, <=, >, >= ==, ===, !=, !== &, ~&, ^, ^~, ~^, |, ~| &&, || ?: 最低级 建议使用小括号运算符限制优先级

阻塞赋值 阻塞赋值方式 = 块内语句逐条进行赋值 建议在组合逻辑中使用

非阻塞赋值 非阻塞赋值方式 <= 块内赋值语句同时执行 建议在时序逻辑中使用 <=

Verilog常用关键字 注意关键字使用小写

编译指令 使用`define 编译引导能提供简单的文本替代功能 `define <宏名> <宏文本> 在编译时会用宏文本来替代源代码中的宏名。 合理地使用`define可以提高程序的可读性 举例说明: `define on 1’b1 `define off 1’b0 `define and_delay #3 在程序中可以用有含义的文字来表示没有意思的数码提高了程序 的可读性,在程序中可以用 `on, `off, `and_delay 分别表 示 1,0,和 #3 。

`include “parts/counter.v” `include “../../library/mux.v” 编译指令 使用`include 编译引导,在编译时能把其指定的整个文件包括进来一起处理 举例说明: `include “global.v” `include “parts/counter.v” `include “../../library/mux.v” 合理地使用`include 可以使程序简洁、清晰、条理清楚、易于查错。

编译指令 `timescale 用于说明程序中的时间单位和仿真精度 举例说明: `timescale 1ns/100ps module MUX2_1(out,a,b,sel); … … not #1 not1(nsel, sel); and #2 and1(a1, a, nsel); endmodule 尽可能地使精度与时间单位接近,只要满足设计的实际需要就行。

编译指令 条件编译指令的格式一般如下: `ifdef NORMAL parameter A = B; `else parameter A =C; `endif 如果宏NORMAL事先已经被定义好,则编译器会执行 parameter A = B;语句,否则执行parameter A =C;语 句。

典型的Verilog设计描述示意图

注释 Verilog 是一种格式很自由的语言。 空格在文本中起一个分离符的作用, 别的没有其他用处。 单行注释符用 //********* 单行注释符用 //********* 与C 语言一致 多行注释符用 /* ------------------------- */

谢谢!