观天下!02-初识Verilog
【资料图】
1.开发环境搭建需要使用的软件:
QuartusIIModelSimVisioNotepad++2.初识Verilog2.1 Verilog HDL简介Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图\逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能Verilog语法自由,易学易用,适用于算法级,门级设计,代码简介,发展较快Verilog从C语言发展而来的2.2 逻辑值0 -- 逻辑低电平,条件为假1 -- 逻辑高电平,条件为真z -- 高阻态,无驱动x -- 未知逻辑电平实际电路中存在0,1,z,亚稳态2.3 关键字module example( input wire sys_rst_n,//输入信号 inout wire sda,//输入输出信号,基本不用 output wire po_flag // 输出信号); // 只有输入信号是不能直接得到输出信号的 // 需要通过一些数据和参数对输入信号进行处理,得到输出信号 // 一般需要对输入信号进行处理之后得到输出信号 // 线网型变量 -- wire可以被看作是物理连接 -- 被综合成物理连线 wire [0:0] flag; // 寄存器型变量 -- 具有对某一时间点的状态进行保持的功能 // 可综合电路中被综合成寄存器 reg [7:0] cnt; // 参数的定义 // parameter 可以在顶层模块通过实例化对参数进行修改 parameter CNT_MAX = 100; //localparam -- 只用在模块内部,不能在实例化的时候进行修改 localparam CNT_MAX = 100; // 模块的实例化 example #( .CNT_MAX (8"d100) // 实例化时参数可以修改 ) example_inst ( .sys_clk (sys_clk), .sys_rst_n (sys_rst_n), .po_flag (po_flag) ); /* 常量 表示方法: [换算为二进制数之后的位宽]"[进制符号][与数值对应的进制数] 8"d171 d -- 十进制 b -- 二进制 h -- 十六进制 不写位宽 -- verilog会自动进行匹配 总位宽大于实际位宽,自动补0,总位宽小于实际位宽,则自动截断左边超出的位数 d"7 8"d7 -- 8"b0000_0111 前面补5个0 2"d7 换算位二进制是 2"b11 (7换成二进制是111),总长度位2位,所以截掉左侧的部分 直接写参数 100 ,表示位宽为32bit的十进制数100 */ // 赋值方式 // 阻塞赋值 = // 阻塞赋值可以看作是顺序执行,每条语句执行完成之后才能执行下一条语句 a = 1; b = 2; c = 3; begin a = b; c = a; end a = 2; b = 2; c = 2; // 非阻塞赋值 <= 并行执行 a = 1; b = 2; c = 3; begin a <= b; // 同一时刻,这两条语句是同时执行的 c <= a; end a = 2; b = 2; c = 1; // always语句 always@(posedge sys_clk or negedge sys_rst_n) if(sys_rst_n == 1"b0) cnt <= 8"b0; // 进行寄存器复位 else if (cnt == CNT_MAX) // 寄存器中的值记到最大的时候,维持最大值 cnt <= CNT_MAX; else cnt <= cnt + 8"d1; // 每个周期都加1 // assign语句 assign po_flag = (cnt == CNT_MAX) ? 1"b1 : 1"b0;endmoudle
2.4 算术运算符+-* -- 一般不用/ -- 一般不用% -- 求余数,两边都为整型数据
2.5 归约运算符\按位运算符& -- 既可以作为单目运算符又可以作为双目运算符// & 作为单目运算符,&m,将m的所有bit相与,得到结果是1bit4"b1111 = 1&1&1&1 = 1"b14"b1101 = 1&1&0&1 = 1"b0// & 作为双目运算符表示按位与,m&n,是将m的每个bit与n的每个bit相与,在运算的时候保证m和n的bit数相等,最后结果位数和m(n)的bit数相等4"b1010&4"b0101 = 4"b0000
&,^,^,|,~| -- 这些运算符都有相同的看法2.6 逻辑运算符&&/||/! -- 与或非三种逻辑运算,返回值为0或者是1逻辑运算符两边非0位真,0为假a = 4"hab = 4"d0c = a && b // c的值为0
2.7 关系运算符a < ba > ba <= ba >= b
2.8 移位运算符移位运算符是二元运算符,<<和>>,将运算符左边的数左移或者是右移指定的位数,用0来补充空闲位b <= a << 1; // a的每一位都左移一位,结果赋值给bb <= a >> 1; // a的没一位都右移一位,结果赋值给b
在应用移位运算符的时候一定要注意他的特性:就是空闲位使用0来补充,也就是说,一个二进制数不管原来的数值是多少,只要一直移位,最终都会变为04"b1000 >> 3; // 4"b00014"b1000 >> 4; // 4"b0000
移位运算符可以代替乘法和除法,左移一位可以看成是乘2,右移一位可以看成是除2,但是要注意位拓展2.9 拼接运算符{,} -- 位拼接运算符a = 8"b1011_1111;b = 3"b011;c = 5"b11011;{a,b,c} ; // 拼接成16bit
2.10 三元运算符[表达式1]?表达式2:表达式3a = 6;b = 7;c = (a>b)?a:b;
2.11 优先级一元运算符>二元运算符>三元运算符!= > 按位运算 > && > || > 条件运算归约运算符 > 算术运算符 > 移位运算符 > 关系运算符 > == 和 !=使用()提升优先级2.12 if-else语句if(表达式) // 这种写法在always语句块产生组合逻辑的时候中会产生latch,不推荐使用 语句块;if(表达式) 语句块1;else if(表达式2) 语句块2;....else 语句; // 这种是最常用的写法
2.12 case语句switch(表达式) case value1 : 语句1; case value2 : 语句2; .... default: 语句;
2.13 系统函数`timescale 1ns/1ns // 时间尺度预编译指令 时间单位/时间精度时间单位和时间精度有由1,10及100以及s,ms,ns,us,ps,fs组成时间单位:定义仿真过程中所有与时间相关量的单位仿真中使用#数字表示延迟相应的时间单位的时间,例如#10表示延时10个时间单位,即10ns时间精度:决定时间相关量的精度及仿真显示的最小单位`timescale 1ns/10ps // 精度0.01, #10.11 表示延迟10110ps`timescale 100ps/1ns // 错误,时间单位不能比时间精度小
// 主要的函数,在支持verilog语法的编译器中都会显示为高亮的关键字$display //打印信息,自动换行$write //打印信息$strobe //打印信息,自动换行,最后执行$monitor //检测变量$stop //暂停仿真$finish //结束仿真$time //时间函数$random //随机函数$readmemb //读取文件的函数
$display()$display(); // 输出,打印信息$display("%b+%b = %d",a,b,c);// %d %D -- 十进制// %o %O -- 八进制// %b %B -- 二进制// %d %D -- 十六进制// 不指定进制,默认为十进制数
`timescale 1ns/1nsmodule tb_test(); reg [3:0] a; reg [3:0] b; reg [3:0] c; // initial只在仿真中使用,是不可综合的 // 仿真开始,只执行一次 initial begin $display("Hello"); $display("EmbedFire"); a = 4"d5; b = 4"d6; c = a + b; #100; $display("%b + %b = %d",a,b,c); endendmoduleresult:HelloEmbedFire010 + 0110 = 11
$write()write() -- 输出打印信息 -- 函数不会自动进行换行`timescale 1ns/1nsmodule tb_test(); reg [3:0] a; reg [3:0] b; reg [3:0] c; // initial只在仿真中使用,是不可综合的 // 仿真开始,只执行一次 initial begin $write("Hello"); $write("EmbedFire"); a = 4"d5; b = 4"d6; c = a + b; #100; $write("%b + %b = %d",a,b,c); endendmodule
$strobe()输出打印函数 -- 在最后进行执行`timescale 1ns/1nsmodule tb_test(); reg [3:0] a; reg [3:0] b; reg [3:0] c; // initial只在仿真中使用,是不可综合的 // 仿真开始,只执行一次 initial begin $strobe("strobe:Hello"); // 写在最前面,但是执行在最后 a = 4"d5; $display("EmbedFire"); $display("display:%b + %b = %d",a,b,c); // 在执行这条语句的时候b,c都没有进行赋值 // 所以b,c未知的x b = 4"d6; c = a + b; #100; endendmodule
$monitor()检测变量,只要打印的变量发生了变化,就会执行一次`timescale 1ns/1nsmodule tb_test();reg [3:0] a;reg [3:0] b;reg [3:0] c;initial begina = 4"d5;#100;b = 4"d6;#100;c = a + b;endinitial begin$monitor("%b + %b = %d",a,b,c);endendmodule
$stop暂停执行仿真`timescale 1ns/1nsmodule tb_test(); initial begin $display("hello"); $display("EmbedFire"); #100; $display("Stop Simulation"); $stop; #100; $display("Finish Simulation"); $finish; // 结束仿真 endendmodule
$time`timescale 1ns/1nsmodule tb_test(); reg [3:0] a; always #10 a = $random; initial $monitor("a = %d @time %d",a,$time);endmodule
$readmemb 和 $readmemh$readmemb -- 用于读取二进制文件函数$readmemh -- 用于读取十六进制文件函数$readmemb("数据文件名",存储器名);$readmemh("数据文件名",存储器名);
`timescale 1ns/1nsmodule tb_test(); integer i; reg [7:0] a [20:0]; // a 为宽度为8bit,深度为21bit的存储器 initial begin $readmemb("EmbedFire.txt",a); for(i = 0;i<=20;i=i+1) begin #10; $write("%s",a[i]); // Welcome to EmbedFire! end endendmodule
读取的文件
标签:
为您推荐
广告
随机阅读
- 观天下!02-初识Verilog
- 魏牌新摩卡5月23日上市!纯电续航204km 或24万起售
- 幽魂碎片有什么用途_幽魂碎片有什么用_天天新资讯
- +1元入门更豪华,2023凡尔赛C5 X更凡尔赛!-百事通
- 世界消息!《神仙道3》最强阵容有什么 阵容推荐
- 520领证现场:有人带铺盖彻夜排队 各地排队场面壮观 全球微资讯
- 环球看热讯:深圳垃圾分类主题原创音乐晚会!这个夏日在坪山激情上演
- 三晋高考指南_2017高考指南_今日要闻
- 当前速讯:小孩牙齿矫正什么年龄最合适_小孩矫正牙齿什么年龄合适
- 全球速读:网贷逾期6天不还后果有哪些
- “水果中的爱马仕”,价格终于被打到跳水了 焦点速递
- 新消息丨向幸福旅程进发 各地探索旅游业新动能
- 中科微至:5月19日融券净卖出2858股,连续3日累计净卖出9320股-报资讯
- 开源项目,只有电子人才能看得懂的二进制手表,酷~
- 新进展!莱荣高铁长轨铺设圆满完成,距10月具备开通条件更近一步-世界快播报
- 重庆到乌鲁木齐机票查询预订儿童_重庆到乌鲁木齐机票_环球看点
- 陆军勤务学院 几本属于重庆_短讯
- 南昌市教育网络平台_南昌市教育网
- 每日热点:宁洛高速漯河段:货车司机途中犯困,揉眼瞬间追尾前车
- 今日cfcdkey列表(cfcdkey哪个有) 天天最资讯
- 1“爽爽贵阳·520购物节”|美食专场活动今日开启
- 2顺网科技:公司将结合自身产品和技术的优势,紧抓机遇,促进相关业务发展|快消息
- 3雍正斗彩官窑瓷器特征_雍正瓷器官窑真品图片|资讯推荐
- 4七旬老人因规定被抬到现场取款?银行:都是误会 新视野
- 5摩根大通资产部策略主管Myles Bradshaw:建立“更谨慎的投资组合”很重要
- 6火热开赛! 第21届天津市青少年机器人竞赛在智能大会现场举行
- 7环球微速讯:充值卡怎么充网费 上网充值卡
- 8环球最新:大专一般多少分能上 需要多少分
- 9昆虫记每章内容概括50字以内_昆虫记每章内容概括10篇每篇400字 全球新消息
- 10全球观天下!奥园集团拟对25.4亿“20奥园01”本息展期 本金分五批兑付
- 1九妹来帮忙|消费者质疑理发店随意涨价!店家:服务内容升级,价格适当上调 每日快讯
- 2储蓄意愿降低源于信心恢复
- 3【播资讯】仓储物流板块震荡上行 圆通速递等涨超4%
- 4今日南财市场情绪指数为27.5 市场投资热度提升 天天快资讯
- 5天天微头条丨《崩坏:星穹铁道》收容舱段战利品收集攻略
- 6每日短讯:广西省造老银元价格(2023年05月19日)
- 7成都市武侯区第七幼儿园中班大班招生报名公告2023(人数+条件) 环球时快讯
- 8广安:乡村美如画 田间插秧忙_全球观焦点
- 9荣盛石化:5月18日融资买入3347.54万元,融资融券余额25.09亿元
- 10环球看热讯:骄成超声: 公司的超声波滚焊机已经为宁德时代供货
广告
财经
- 新思想引领新征程·河北答卷丨创新,河北澎湃“第一动力” 全球快资讯
- 全球速讯:“居民健康的守门人”!全国已组建家庭医生团队超42万个
- 失业保险降费率政策延续至明年底|天天时讯
- 猎人护符怎么接_猎人的护符任务为什么接不 世界资讯
- 同饮下午茶 暖企助发展 每日速讯
- 民生银行(01988):回复上交所《关于中国民生银行股份有限公司向不特定对象发行可转换公司债券申请文件的审核问询函》
- 世界最新:酷传数据查看_酷传数据
- 1979年属羊的幸运数字和颜色_属羊的幸运数字和颜色
- 菲律宾拨款1387.7亿比索支持高等教育发展 播资讯
- 环球热门:当日快讯:中公教育今日大宗交易折价成交877万股,成交额3990.35万元
- 关于梦想起航的句子摘抄_关于梦想起航的句子
- 广西打造首批个体工商户、私营企业主题银行|全球今日报
- 四川智慧助老公益活动走进社区
- 33秒20cm涨停!机器人“更像人类了” 马斯克要卖100亿台 概念股名单曝光!|今日看点
- 环球消息!金冠电气(688517.SH):鼎汇通累计减持3.81%公司股份 提前终止本次股份减持计划
- 今日关注:中指研究院发布2023中国房地产上市公司TOP10研究报告
- 中甲 | 黑龙江冰城连续两轮违纪被罚-全球百事通
- 送女生什么礼物好(520第一次送女生什么礼物好)
- 看热讯:公司实行综合工时制 职工不愿加班遭除名
- 头条焦点:从多维度数据看数字经济发展势能