1--verilog HDL 语言的预编译指令作用:指示在编译verliog HDL源代码前,需要执行哪些操作。

2--模块内容是嵌在module 和endmodule两个语句之间。每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最
后通过由顶层模块调用子模块来实现整体功能。

3--模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。

4-verilog hdl语言支持的并行语句主要有一下四种:

连续赋值语句

模块实例化语句

initial语句

always语句

模块引用方式:

端口定义:

事件:当线网型或寄存器型信号的值发生变化时,对电路来说就是产生了一个事件,就需要进行相应的计算。

事件在代码中以@(时间列表)形式出现,事件列表可以有多个,用or分开,也可以用“,”分开,他们之间是“或”的关系。也就是说只要有一个事件产生,就会执行进程语句。事件分为电平信号和边沿信号两种。(posedge:上升沿事件,negedge:下降沿事件。)

【进程:行为模型的本质是进程。一个进程可以被看做是一个独立的运行单元,它可能很简单,也可能很复杂,我们可以将数字系统的行为看作很多有机结合的进程的集合。

在Verilog HDL中,描述进程的基本语句是always和initial。Always过程反复执行其中的块语句,而initial过程中的语句块只执行一次。除了always和initial过程块外,一个assign赋值语句、一个实例元件的调用都可以看作是一个进程。

进程的特点:

1-进程只有两种状态,即执行态和等待状态。进程是否进入执行态,取决于是否满足特定的条件,如敏感变量是否发生变化。一旦满足条件,进程即进入执行状态。当该进程执行完毕或遇到停止语句后,即停止执行,自动返回到起始语句,进入等待状态。
2-进程一般由敏感信号的变化来启动
3-各个进程之间通过信号线进行通信。多个进程之所以能同步并发运行,一个很重要的原因就是有进程之间的信号线的通信和协议。
4-一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。
5-进程之间是并发执行的。两个或更多个“always”过程块、“assign”持续赋值语句、实例元件调用等操作都是同时执行的。】

always语句:(可综合)

特点:

1-循环执行

2-可综合

【综合:将用行为和功能层表达的电子系统转换成低层次的便于具体实现的模块组合装备的过程。

综合过程将把软件设计的HDL描述与硬件结构挂钩,是将软件转化为硬件电路的关键步骤,是文字描述与硬件相结合的一座桥梁。综合就是将电路的高级语言(如行为描述)转化为低级的,可以FPGA/CPLD的基本结构相映射的网表文件或程序。

当输入的hdl文件在eda工具中检测无误后,首选面临的就是逻辑综合,因此要求hdl源文件中的语句都是可综合的。】

3-必须有时序控制

4-在0时刻开始执行,可以有一条或者多条顺序语句。

使用方法:

语法格式:always

      [时序控制]顺序语句;

时序控制可以是以时间刻度为单位的时间延时数字,也可以是信号变化事件条件。

当顺序语句有多条时,可以使用“begin”-“end”字符对进行组织。

【begin -- end就是一个模块 (相当于 C语音的一段程序)的起始和结束的标记。非常类似于 C语言中的 大括号 ({……})。】

注意:在不同的always逻辑块中,对同一个reg变量进行赋值,会冲突导致报错!

赋值操作符:

意义是更新被赋值数据对象的值。

1,赋值操作符 <=:

该操作符在进程块中使用,是非阻塞赋值,由于在进程中使用,所以被赋值的数据对象必须是reg型。

2,赋值操作符=:

该操作符在进程或者assign连续赋值语句中使用。被赋值数据对象可以是reg型或wire型,其中在进程块中的赋值方式是阻塞赋值。

*********************************************************************************************************************************************************

学习了上面的知识点,应该就能看懂下面的代码了。

 'timescale 1ns/1ps  //预编译指令定义了时间单位为1ns,时间精度为1ps

 module led_test(clk,rst_n,led);

 input clk;
input rst_n;
output [:] led; //寄存器型数据对象的定义
reg [:] timer;
reg [:] led; always @(posedge clk or negedge rst_n)
begin
if(~rst_n)
timer <=;
else if(timer=='d199_999_999)
timer<=;
else
timer<=timer+'b1;
end always @(posedge clk or negedge rst_n)
begin
if(~rst_n)
led<='b0000;
else if(timer=='d49_999_999)
led<='b0001;
else if(timer=='d99_999_999)
led<='b0010;
else if(timer=='149_999_999)
led<='b0100;
else if(timer=='d199_999_999)
led<='b1000;
end endmodule

ok,今天的学习结束!

verilog HDL -模块代码基本结构的更多相关文章

  1. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  2. Verilog HDL模块的结构

    一个设计是由一个个模块(module)构成的.一个模块的设计如下: 1.模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字 ...

  3. 自己动手写处理器之第二阶段(2)——Verilog HDL简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版),今天是第六篇.我尽量每周四篇 2.3 Verilog HDL简单介绍 本书实现的OpenMIPS处理器是使用Verilog HDL编 ...

  4. 你知道Verilog HDL程序是如何构成的吗

    本节通过硬件描述语言Verilog HDL对二十进制编码器的描述,介绍Verilog HDL程序的基本结构及特点. 二十进制编码器及Verilog HDL描述 二十进制编码器是数字电路中常用的电路单元 ...

  5. Verilog HDL的程序结构及其描述

    这篇博文是写给要入门Verilog HDL及其初学者的,也算是我对Verilog  HDL学习的一个总结,主要是Verilog HDL的程序结构及其描述,如果有错,欢迎评论指出. 一.Verilog ...

  6. 浅谈Verilog HDL代码编写风格

    消失了好久,没有写文章,也没有做笔记,因为最近再赶一个比赛,时间很紧,昨天周六终于结束了,所以趁着周末这会儿有时间,写点东西,记录下来.首先我学习FPGA才一年多,我知道自己没有资格谈论一些比较深层次 ...

  7. 基于Verilog HDL 的数字时钟设计

    基于Verilog HDL的数字时钟设计 一.实验内容:     利用FPGA实现数字时钟设计,附带秒表功能及时间设置功能.时间设置由开关S1和S2控制,分别是增和减.开关S3是模式选择:0是正常时钟 ...

  8. FPGA Verilog HDL 系列实例--------步进电机驱动控制

    [连载] FPGA Verilog HDL 系列实例 Verilog HDL 之 步进电机驱动控制 步进电机的用途还是非常广泛的,目前打印机,绘图仪,机器人等等设备都以步进电机为动力核心.那么,下面我 ...

  9. 写自己的第二级处理器(3)——Verilog HDL行为语句

    我们会继续上传新书<自己动手写处理器>(未公布),今天是第七章,我每星期试试4 2.6 Verilog HDL行为语句 2.6.1 过程语句 Verilog定义的模块一般包含有过程语句,过 ...

随机推荐

  1. oracle的权限和角色

    1 介绍  这一部分我们主要看看oracle是如何管理权限和角色的,权限和角色的区别在哪里. 当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必须为其授予系统 ...

  2. leetcode14:最长公共字符串

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  3. python字符串前面的r/u/b的意义 (笔记)

    u/U:表示unicode字符串 : 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. r/R:非转义的原始字符串: 与普通字符相比,其他相对特殊的字符,其中可能包含 ...

  4. 实战ELK(3) Kibana安装与简单实用

    第一步:下载 https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-x86_64.rpm 第二步:安装 1.安装 yum install ...

  5. 用python探索和分析网络数据

    Edited by Markdown Refered from: John Ladd, Jessica Otis, Christopher N. Warren, and Scott Weingart, ...

  6. spring 之 类型转换 2

    spring内置的转换器 在spring xml 文件中,配置属性的时候, 不管实际是 list 还是map ,还是Date, 或者原生的java 类型, 我们只能配置xml 给它们. 那么 spri ...

  7. React更新元素 基础

    React元素创建后无法修改其内容和属性.唯一的办法是创建新的元素,传入ReactDOM.render()方法 三种实现形式: 1.整体替换 function tick () { const ele= ...

  8. Java获取工程目录

    背景:程序执行时,会涉及到去读取配置文件等操作,那就需要了解怎么获得文件路径   Java目录映射关系 说明一点:在Java代码执行时,会将编译生成的classes文件,以及配置文件等信息生成到tar ...

  9. E. Segment Sum(数位dp)

    题意:求一个区间内满足所有数位不同数字个数小于K的数字总和.比如:k=2   1,2,3所有数位的不同数字的个数为1满足,但是123数位上有三个不同的数字,即123不满足. 我们可以使用一个二进制的数 ...

  10. 用rekit创建react项目

    第一步  先进入github.com 然后搜索rekit 往下滑 1 . 先全局安装 npm install -g rekit 2 . 进入自己想要创建项目文件的目录输入 rekit create / ...