IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Verilog笔记(二)程序框架 -> 正文阅读

[C++知识库]Verilog笔记(二)程序框架

来自正点原子的学习笔记
我在学习的过程中会尽量把它和C语言进行比较,毕竟有较大的相似之处


正文开始

1 Verilog注释

C语言,有两种注释方式
方式一:以//开头,注释到本行结束

code balabala                       // 这里写注释!

方式二:以/* 开头,以*/ 结尾,中间都是注释语句

code balabala
/* 
这里面都是注释!
这也是!
*/

2 Verilog关键字

关键字是软件/程序 会自动识别的一些词
因此命名应该不与这一类重合,应避开
在这里插入图片描述常用的关键字
在这里插入图片描述

3 Verilog程序框架

3.1 基本内容介绍

Verilog的基本设计单元是“模块”(block)
类似于C语言的函数
一个模块由两部分组成,一部分描述接口,一部分描述逻辑功能
类似于C语言函数的参数和函数主体部分

每个Verilog程序包括四个主要部分:
端口定义、IO说明、内部信号声明 (见程序)、功能定义

3.2 模块讲解

下面以一个模块来讲解
在这里插入图片描述
module 和endmodule分别表示模块的开始和模块的结束
注意module一句结尾有分号!endmodule没有!)

模块名为block(建议命名直接一些)
接口是a,b,c,d(端口定义)
每一句完整的语句都和C语言需要一个 ;分号

input表示输入,output表示输出(IO说明)

assign 是给线网类型的变量赋值的一种形式,abcd是wire类型的变量
c是a和b的或运算,d是a和b的与运算(这部分描述了整个模块的功能)

不懂的可以回去看看哦,这是链接.
在这里插入图片描述

3.3 主要部分的表达

这是模块的形象的图形(端口定义和IO说明)
在这里插入图片描述
这是模块的可综合电路(功能定理部分)
可以这样理解:可综合的电路最终是能够生成一个物理的电路的
而不可综合的电路多用于仿真语句,此处就不赘述了。
在这里插入图片描述

3.4 完整的Verilog程序讲解

流水灯程序结构

module flow_led(//模块名称
	input                                                  sys_clk,//系统时钟
	input       											 sys_rst_n,//系统复位,低电平有效

	output  reg  [3:0]   led                          //4个LED灯
	//定义输出端口是一个寄存器reg类型的端口,如果不指定,都是默认为wire线网类型的
	);
//reg  define
reg [23:0] counter ;                               //内部信号声明
//*************************************************************************************
//*                 main code
//*************************************************************************************
//计数器对系统时钟计数,计时0.2秒
always @(posedge  sys_clk or negedge sys_rst_n)begin
	if (!sys_rst_n)
		counter <= 24'd0;
	else fi (counter < 24'd1000_0000)
			counter <= counter +1'b1;
	else 
			counter <= 24'd0;
end 
//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge  sys_clk or negedge sys_rst_n)begin
	if (!sys_rst_n)
		led <= 4'd0001;
	else fi (counter < 24'd1000_0000)
			led[3:0] <={led[2:0],;ed[3]};
	else 
			led <= led;
end 

endmodule//module和endmodule之间是程序的开头和结尾


功能定义部分有三种方法:
1.assign语句 描述组合逻辑(见3.2)
2.always语句 描述组合/时序逻辑(本程序)
(具体两者的差异,之后会讲解)
3.例化实例元件 如:and#2 u1 (q,a,b);
and是关键字,与门。
上述三种逻辑功能是并行的,,,,,,,不同于C语言的串行
注意:
在always块中,逻辑是顺序执行的。(内部)
而多个always块之间是并行的。(外部)

3.5 模块的调用(类似C语言的函数调用)

在模块调用时,信号通过模块端口在模块之间传递。
eg:静态数码管,这个模块是一个Top上层模块
在这里插入图片描述例化的模块是time_count部分,类似于C语言里正在“调用函数
其中还新起了一个名字,为u_time_count
在这里插入图片描述在这里插入图片描述

这部分是端口的连接方式
左边是这个模块的端口,右边是要连接的端口
从而实现底层模块和上层模块的信号交互
PS:flag是一个输出信号,传递到顶层模块的add_flag变量里

下图是这个模块的定义,类似于C语言里正在“定义函数
红色圈部分就是刚才提到的自身模块的端口
在这里插入图片描述
另一种端口连接方式
在这里插入图片描述
与前一种端口连接方式不同(见红色圈:左边是输出端口,右边是传入端口),
这种端口连接方式更加简单
不过,需要更加严格的排列一一对应
简而言之,默认和省略了传入信号的端口
(不推荐这种写法)

还有一些细节

time _count #(
		.MAX_NUM    (TIME_SHOW)

这中.+参数名,是参数传递方法,后面是传递进的变量

3.6 生成的原理图

在这里插入图片描述
注意之间的连接,之间的关系

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 11:49:20  更:2021-08-30 11:49:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/4 21:22:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码