主要使用关键词initial或always定义的两种结构类型的描述语句,initial主要用于面向仿真的过程语句,不能用来描述硬件逻辑电路的功能。

1.always结构型说明语句

用法:

always @(事件控制表达式)
begin:块名
块内局部变量的定义;
一条或者多条过程赋值语句;
end

不停的循环执行其内部的过程赋值语句,直到仿真过程结束。always语句主要对硬件电路的行为功能进行描述,也可以再测试模块中对时钟信号进行描述。

其中“事件控制表达式”又叫敏感事件表,只要里边的某一条件发生改变,则执行always语句,“过程赋值语句”的左值必须是reg(连续赋值语句assign左值必须是wire类型),右边没有要求。

begin与end包起来就是一个块,里边的语句按顺序执行,其实就相当于C语言的{} 。

在always与initial中定义新变量时,begin后必须要加冒号加块名,否则报错,不定义新变量加上块名也是好习惯。

例子:2线-4线译码器。

module Decoder2x4_gates(
input [1:0]A,
input En,
output [3:0]Y); always @ (A or En) //input与output如果不声明就默认是wire。
begin:Decoder
Y[0] = ~(~A[1] & ~A[0] & En);
Y[1] = ~(~A[1] & A[0] & En);
Y[2] = ~(A[1] & ~A[0] & En);
Y[3] = ~(A[1] & A[0] & En);
end
endmodule

2.条件语句

其实与C语言用法一样,如果是多条语句就记得加begin,end,相当于C语言用{}包起来。

3.多路分支语句

case,但语法不同。

用法:

case(case_expr)
item_expr1: statement1;
item_expr2: statement2;
......
default:default_statement;
endcase

如果是多条语句,还是要加begin,end,如果判断到与某一分支值相同,那么case语句直接执行结束。

case还有两种变体,casez与casex,casez语句中,将z视为无关值,即如果比较双方有一方的有一位的值是z,那么该位不予考虑,比较结果永远为真;casex就是把z和x全视为无关值,都不考虑,比较结果永远为真。

5.循环语句

for、repeat、while和forever,里边可以包含延时控制。只能在initial或always内部使用。多条语句依然要使用begin与end包起来。

(1)for循环语句

用法:

for (表达式1;条件表达式2;表达式3) 语句块

与C语言类型,关于表达式3,verilog是没有自增自减运算符的,所以只能写i = i + 1或者i = i - 1之类的,但是SystemVerilog中支持了++与--。



图引用自什么场合下会用到systemverilog? - 路桑的回答 - 知乎

其实verilog与SystemVerilog就像是C与C++的区别,能被大多数综合综合语句支持,也能用于仿真测试,下边其他三条基本用于仿真测试了。

(2)while循环

与C语言相同,主要用于仿真测试。

(3)repeat循环语句

用法:

repeat(循环次数表达式)语句块

可以指定循环次数,如果循环次数表达式值不确定,按x与z处理,则循环次数按0处理,主要用于仿真测试。

(4)forever循环语句

无限循环,如果不使用某种形式的时序控制,就无限执行,后边的语句永远不会被执行。

initial
begin
CP = 1'b1;
#50 forever
#25 CP=~CP;
end

上边例子的含义就是,CP在0时刻初始化为1,一直保持到第50个时间单位。然后以后每25个ns,CP反相一次,直到300ns,这个语句主要用于仿真测试。

Verilog HDL组合电路的行为级建模的更多相关文章

  1. 【转】Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)

    Verilog HDL常用建模方式——<Verilog与数字ASIC设计基础>读书笔记(四) Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路.所谓综合(Synthesis) ...

  2. Verilog门级建模

    门级建模就是将逻辑电路图用HDL规定的文本语言表示出来,即调用Verilog语言中内置的基本门级元件描述逻辑图中的元件以及元件之间的连接关系. Verilog语言内置了12个基本门级元件模型,如下表所 ...

  3. 【黑金教程笔记之003】【建模篇】akuei2的Verilog hdl心路

    Verilog hdl不是“编程”是“建模” Verilog hdl语言是一种富有“形状”的语言. 如果着手以“建模”去理解Verilog hdl语言,以“形状”去完成Verilog hdl语言的设计 ...

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

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

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

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

  6. Verilog HDL设计规范及经验谈(转载)

    1. 规范很重要      工作过的朋友肯定知道,公司里是很强调规范的,特别是对于大的设计(无论软件还是硬件),不按照规范走几乎是不可实现的.逻辑设计也是这样:如果不按规范做的话,过一个月后调试时发现 ...

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

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

  8. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)

    本文记录一些关于Verilog HDL的一些技巧.易错.易忘点等(主要是语法上),一方面是方便自己忘记语法时进行查阅翻看,另一方面是分享给大家,如果有错的话,希望大家能够评论指出. 关键词: ·技巧篇 ...

  9. verilog HDL -模块代码基本结构

    1--verilog HDL 语言的预编译指令作用:指示在编译verliog HDL源代码前,需要执行哪些操作. 2--模块内容是嵌在module 和endmodule两个语句之间.每个模块实现特定的 ...

  10. 【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式

    刚开始接触Verilog HDL语言时,这种硬件描述语言有一点与软件的程序设计语言直观上的最大区别大概就是这个赋值语句了(这里只是强调直观上的最大区别,事实上的最大区别并非如此). Verilog H ...

随机推荐

  1. ASP.NET WebForm中asp:Repeater和UI:Grid数据为空时如何显示表头?

    一.asp:Repeater Repeater 控件用于显示被绑定在该控件上的项目的重复列表.Repeater 控件可被绑定到数据库表.XML 文件或者其他项目列表. 1.1-前台页面代码 <a ...

  2. 你真的知道吗?catch、finally和return哪个先执行

    我的一位朋友前阵子遇到一个问题,问题的核心就是try--catch--finally中catch和finally代码块到底哪个先执.这个问题看起来很简单,当然是"catch先执行.final ...

  3. C#/.NET/.NET Core优秀项目和框架每周精选(坑已挖,欢迎大家踊跃提交PR或者Issues中留言)

    前言 注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯). 每周精选优秀的C#/.NET/.NET Core项目和框架,帮助 ...

  4. 微服务项目使用RabbitMQ

    微服务项目使用RabbitMQ 很久未用RabbitMQ了,根据网上的Demo,大多数是一个服务包含所有的生产者和消费者和配置,当自己去搭建服务的时候,还需要一些思考各种包的划分.无法无脑CV大法,所 ...

  5. RocketMQ Linux单机测试:简易快速部署指南及Dashboard控制台部署

    目录 简介 开始 下载 增加环境变量 修改启动文件jvm大小 修改rocketmq配置文件 启动 快速测试 关闭 Dashboard 下载Dashboard 已编译jar包网盘下载 启动命令 可能遇到 ...

  6. python中将时间转换为时间戳

    某平台url中的时间格式为时间戳,将时间变量传入url前,需要将固定格式的时间转换为时间戳.使用python中的time模块,对时间的几种格式进行转换. strptime(),将时间字符串转换成 结构 ...

  7. java多线程使用详解与案例,超详细

    一.创建线程的方式 1.继承Thread类 让子类继承Thread线程类 子类必须重写Thread类的run方法 创建一个自己定义的线程对象 调用start()方法启动线程 //测试类 /** * 1 ...

  8. AI绘画| 迪士尼风格|可爱头像【附Midjourney提示词】

    Midjourney案例分享 图片预览 迪士尼风格|可爱头像 高清原图及关键词Prompt已经放在文末网盘,需要的自取 在数字艺术的新时代,人工智能绘画已经迅速崭露头角.作为最先进的技术之一,AI绘画 ...

  9. Jmeter读取结果文件报错Error loading results file解决方法

    最近在项目性能测试过程中,遇到jmeter读取jtl文件出错的问题,如下图所示: 方法一:修改配置文件 将要读取结果文件的组件Configure界面配置都勾选上,默认情况下有些选项没勾选会出错. 第一 ...

  10. 如何通过拼多多订单API接口获取订单详情

    要获取拼多多订单详情,可以使用以下接口: 1. API名称:pdd.order.detail.get 接口说明:此接口用于查询某个订单的详情信息. API文档地址:前往注册 调用该接口需要提供以下参数 ...