verilog学习笔记- 7)verilog程序框架

news2024/11/27 8:34:15

目录

注释:

关键字:

Verilog常用的关键字:

程序框架:


注释:

Verilog HDL 中有两种注释的方式,一种是以“/*”符号开始,“*/”结束,在两个符号之间的语句都 是注释语句,因此可扩展到多行。如:

/* statement1 ,

statement2,

......

statementn */

另一种是以//开头的语句,它表示以//开始到本行结束都属于注释语句。如:

//statement1

关键字:

Verilog常用的关键字:

 

注意只有小写的关键字才是保留字。例如,标识符 always(这是个关键词)与标识符 ALWAYS(非关键词) 是不同的。

程序框架:

1 module led(
2     input sys_clk , //系统时钟
3     input sys_rst_n, //系统复位,低电平有效
4     output reg [3:0] led //4 位 LED 灯
5     );
6 
7 //parameter define
8 parameter WIDTH = 25 ;
9 parameter COUNT_MAX = 25_000_000; //板载 50M 时钟=20ns,0.5s/20ns=25000000,需要 25bit
10 //位宽
11 
12 //reg define
13 reg [WIDTH-1:0] counter ;
14 reg [1:0] led_ctrl_cnt;
15 
16 //wire define
17 wire counter_en ;
18 
19 //***********************************************************************************
20 //** main code
21 //***********************************************************************************
22
23 //计数到最大值时产生高电平使能信号
24 assign counter_en = (counter == (COUNT_MAX - 1'b1)) ? 1'b1 : 1'b0; 
25 
26 //用于产生 0.5 秒使能信号的计数器
27 always @(posedge sys_clk or negedge sys_rst_n) begin
28     if (sys_rst_n == 1'b0)
29     counter <= 1'b0;
30     else if (counter_en)
31     counter <= 1'b0;
32     else
33     counter <= counter + 1'b1;
34 end
35 
36 //led 流水控制计数器
37 always @(posedge sys_clk or negedge sys_rst_n) begin
38     if (sys_rst_n == 1'b0)
39     led_ctrl_cnt <= 2'b0;
40     else if (counter_en)
41     led_ctrl_cnt <= led_ctrl_cnt + 2'b1;
42 end
43 
44 //通过控制 IO 口的高低电平实现发光二极管的亮灭
45 always @(posedge sys_clk or negedge sys_rst_n) begin
46     if (sys_rst_n == 1'b0)
47     led <= 4'b0;
48     else begin
49     case (led_ctrl_cnt) 
50     2'd0 : led <= 4'b0001;
51     2'd1 : led <= 4'b0010;
52     2'd2 : led <= 4'b0100;
53     2'd3 : led <= 4'b1000;
54     default : ;
55     endcase
56     end
57 end
58 
59 endmodule
  • 第 1 行为模块定义,模块定义以 module 开始,endmodule 结束
  • 其次 2 到 5 行为端口定义,需要定义 led 模块的输入信号和输出信号,此处输入信号为系统时钟和复位 信号,输出为 led 控制信号
  • 7 到 9 行为参数 parameter 定义,语法如 7 到 9 行所示,定义 parameter 的好处是可以灵活改变参数数字 就能控制一些计数器最大计数值或者信号位宽的最大位宽。
  • 12 到 14 行为 reg 信号定义,reg 信号一般情况下代表寄存器,比如此处控制 0.5 秒使能信号的计数器 counter。
  • 16 到 17 行为 wire 信号定义,wire 信号就是硬件连线,比如此处的 counter_en,代表计数到最大值时产 生高电平使能,本质上是一个硬件连线,其实代表的是一些计数器/寄存器做逻辑判断的结果。
  • 19 到 21 行为 moudle 开始的注释,不添加工具综合也不会报错,但是我们推荐添加,作为一个良好的 编程规范。
  • 23 到 24 行为 assign 语句的样式,条件成立选择 1,否则选择 0。
  • 26 到 34 行是 always 语句的样式,27 行代表在时钟上升沿或者复位的下降沿进行信号触发。begin/end 代表语句的开始和结束。
  • 28 到 33 行为 if/else 语句,和 C 语言是比较类似的。29 行的“<=‖标记代表信号是 非阻塞赋值,信号赋值有非阻塞赋值和阻塞赋值两个方式,这个我们后面会详细解释。
  • 36 和 42 行也是一个 always 语句,和 26 到 34 行类似。
  • 44 和 57 行也是一个 always 语句,不过这个 always 语句中嵌入了一个 case 语句,case 语句的语法如
  • 49 到 55 行所示,需要一个 case 关键字开始,endcase 关键字结束,default 作为默认分支,和 C 语言也是类似 的。当然 case 语句也可以用在不带时钟的 always 语句中,不过本例子的 always 都是带有时钟的。不带时钟 的 always 和带时钟的 always 语句的差异这个我们后面也会详细解释。
  • 59 行是 endmodule 标记,代表模块的结束。 在这里需要补充一点的是,一些初学者可能会有这样一个疑问,在 always 语句中编写 if 语句或 else 语 句时,后面需要加 begin 和 end 吗?其实这个主要看 if 条件后面跟着几条赋值语句,如果只有一条赋值语句 时,if 后面可以加 begin 和 end,也可以不加;如果超过一条赋值语句时,就必须加上 begin 和 end。
  • if 条件只有一条赋值语句时,下面两种写法都是可以的,这里更推荐第一种写法,因为第二种写法会占 用更多的行号,代码如下所示:

感觉仅仅看一次代码并不能学到verilog语法,推荐夏宇闻的verilog经典教程

这次笔记仅做了解吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143211.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

7-10 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输出格式&#xff1a; 对每一对需要计算的集合&…

DaVinci:键 - 键混合器

调色页面&#xff1a;键Color&#xff1a;Key当选中一个键混合器节点时&#xff0c;键 Key调板上对应显示键混合器 Key Mixer的相关选项。键混合器节点默认有两个输入链接。可在键混合器节点上右击选择“添加”或“移除”一个输入。所有的输入链接和惟一的输出链接均可在键调板…

Elasticsearch在各大互联网公司大量真实的应用案例

国内现在有大量的公司都在使用 Elasticsearch&#xff0c;包括携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。 除了搜索之外&#xff0c;结合Kibana、Logstash、Beats&#xff0c;Elastic Stack还被广泛运用在大数据近实时分析领域&#xff0c;包括日志分…

SQL如何在数据库中执行

数据库的服务端&#xff0c;可分为执行器(Execution Engine) 和 存储引擎(Storage Engine) 两部分&#xff1a; 执行器负责解析SQL执行查询存储引擎负责保存数据 1 SQL如何在执行器中执行 # 查询用户ID大于50的用户的所有订单 SELECT u.id AS user_id, u.name AS user_name,…

详解回调函数

目录 前言 一、 实现一个简单的计算器 1.1 - 代码一 1.2 - 代码二 二、qsort 函数的介绍 三、改进冒泡排序函数 前言 回调函数就是一个通过函数指针调用的函数。如果把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指针被用来调用其…

微信公众号调用扫一扫功能

手把手教你调用微信扫一扫&#xff0c;三分钟包会_前端人的博客-CSDN博客_调用微信扫一扫 第一次搞公众号&#xff0c;还以为跟上回调用企业微信扫一扫一样。。。调起扫一扫功能的过程自然是不同的&#xff0c;要注意的地方还挺多&#xff0c;记录一下 。 其实&#xff0c;在使…

2023最新网络安全自学路线,内容涵盖3-5年技能提升

前言 先预祝大家新年快乐&#xff01; 【一一帮助网络安全入门和提升点这里一一】 01 什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究…

改进MBR(操作显卡来输出字符)

文章目录前言前置知识mbr.S代码实验操作前言 本博客记录《操作系统真象还原》第二章第一个实验操作~ 实验环境&#xff1a;ubuntu18.04VMware &#xff0c; Bochs下载安装 实验内容&#xff1a;在屏幕上打印字符串【采用的方式是直接修改显存实现】 实验原因&#xff1a;mb…

Flutter性能优化

原理 Flutter的架构主要分成三层&#xff1a;Framework&#xff0c;Engine和Embedder Framework 使用 dart 实现&#xff0c;包括 Material Design 风格的Widget&#xff0c;Cupertino(针对iOS)风格的Widgets&#xff0c;UI/文本/图片/按钮等基础 Widgets&#xff0c;渲染&…

设计模式学习(一):Bridge桥接模式

一、什么是Bridge模式Bridge模式的作用是在“类的功能层次结构”和“类的实现层次结构”之间搭建桥梁。1.1 类的功能层次结构主要作用就是增加新的功能。当我们要增加新的功能时&#xff0c;我们可以从各个层次的类中找出最符合自己需求的类&#xff0c;然后以它为父类编写子类…

(Week 10)最小生成树(C++,prim,Kruskal,并查集)

文章目录Einstein学画画&#xff08;C&#xff0c;欧拉路&#xff09;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示解题思路&#xff1a;并查集&#xff08;C&#xff09;[蓝桥杯 2017 国 C] 合根植物&#xff08;C&#xff0c;并查集&#xff09;题目描述输入格…

基于Java+SpringBoot+vue+element实现校园闲置物品交易网站

基于JavaSpringBootvueelement实现校园闲置物品交易网站 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目录基于JavaSpri…

Element UI 走马灯的使用

目录 走马灯是什么 原生js实现 Element UI的走马灯使用 el-carousel Carousel Events el-carousel-item 走马灯是什么 在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容&#xff0c;走马灯也叫轮播图。 比如 原生js实现 JS实现轮播图效果&#xff08;同时…

mysql学习总结二

聚合函数 聚合函数表示对 值的集合 进行操作的 组&#xff08;集合&#xff09;函数。 # 华为手机价格的平均值 SELECT AVG(price) FROM products WHERE brand 华为; # 计算所有手机的平均分 SELECT AVG(score) FROM products; # 手机中最低和最高分数 SELECT MAX(score) FR…

SpringBoot解决全局和局部跨域问题的两种方式

前言 在如今前后端分离的开发模式下&#xff0c;跨域是一个非常经典的问题&#xff0c;解决的方式也有很多&#xff0c;比如代理服务器&#xff0c;使用JSONP 我之前也写过一篇解决跨域问题的文章&#xff0c;感兴趣的可以参考&#xff1a;解决Vue前后端跨域问题的多种方式 …

【现代机器人学】学习笔记九:运动规划

本节和前一节 【现代机器人学】学习笔记八&#xff1a;轨迹生成 不同&#xff0c;侧重于避障的内容。有一些我认为的重要的基本的概念&#xff1a;1.路径规划是一个纯几何问题&#xff0c;寻找一条无碰撞路径&#xff0c;不涉及动力学和时间相关内容。因此路径规划是运动规划的…

请查收 | 2022 阿里妈妈技术文章回顾

新年伊始&#xff0c;万象更新&#xff01;转眼&#xff0c;阿里妈妈技术已陪伴大家走过601天~在此&#xff0c;感谢每位读者朋友的支持与关注回顾2022&#xff0c;我们分享了60篇原创技术文章、发布了1本营销科学系列白皮书、开源了1项向量召回技术方案&#xff1b;阿里妈妈营…

Netty基础入门——NIO【1】

Netty基础入门——NIO【1】 1 NIO 1.1 三大组件 1.1.1 Channel && Buffer Channle channel类似于stream&#xff0c;是读写数据的双向通道&#xff0c;而stream要么是输入要么是输出 #mermaid-svg-9w1vFFYCVQmRvHja {font-family:"trebuchet ms",verdana…

YACC移进规约冲突案例分析

总结 总结&#xff1a; bison给出的用例是发现冲突的最便捷方法。 第一种用例&#xff1a;明确用例&#xff08;一个Example&#xff09;&#xff0c;直接反应问题。第二种用例&#xff1a;混淆用例&#xff08;两个Example&#xff09;&#xff0c;解析器无法区分两条语句。…

jenkins 节点部署

1、节点注册 登陆jenkins master界面 路径&#xff1a;首页-->系统管理--> 节点管理-->新建节点&#xff08;New Node&#xff09; 插曲&#xff1a;我在新的服务器部署master节点&#xff0c;显示剩余交换空间为0B 处理方式请查看&#xff1a;Jenkins - Free Swap…