verilog行为建模(一):基本概念

目录

  • 1.行为描述
  • 2.过程(procedural)块
  • 3.过程赋值(procedural assignment)
  • 4.过程时序控制
  • 5.简单延时
  • 6.边沿敏感时序
  • 7.wait语句

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

1.行为描述

  • 行为级描述是对系统的高抽象级描述。在这个级别,表达的是输入和输出之间转换的行为,不包含任何结构信息。
  • Verilog有高级编程语言结构用于行为描述,包括:wait, while, if then, case和forever。
  • Verilog的行为建模是用一系列以高级编程语言编写的并行的、动态的过程块来描述系统的工作。

D触发器

  • 在每一个时钟上升沿,若Clr不是低电平,置Q为D值,置Qb为D值的反。
  • 无论何时Clr变低,置Q为0,置Qb为1

2.过程(procedural)块

  • 过程块是行为模型的基础。
  • 过程块有两种:
  1. initial块,只能执行一次
  2. always块,循环执行
  • 过程块中有下列部件
  1. 过程赋值语句:描述过程块中的数据流
  2. 高级结构(循环,条件语句):描述块的功能
  3. 时序控制:控制块的执行及块中的语句。

过程块

3.过程赋值(procedural assignment)

  • 在过程块中的赋值称为过程赋值。
  • 在过程赋值语句中表达式左边的信号必须是寄存器类型(如reg类型)
  • 在过程赋值语句等式右边可以是任何有效的表达式,数据类型也没有限制。
  • 如果一个信号没有声明则缺省为wire类型。使用过程赋值语句给wire赋值会产生错误。

过程赋值时声明缺省报错

module adder (out, a, b, cin);
      input a, b, cin;
      output [1:0] out;
      wire a, b, cin;
      reg half_sum;
      reg [1: 0] out;
   always @( a or b or cin)
   begin
      half_sum = a ^ b ^ cin ; // OK
      half_carry = a & b | a & !b & cin | !a & b & cin ; // ERROR!
      out = {half_carry, half_ sum} ;
   end
endmodule

4.过程时序控制

在过程块中可以说明过程时序。过程时序控制有三类:

  1. 简单延时(#delay):延迟指定时间步后执行
  2. 边沿敏感的时序控制:@(<signal>)
  • 在信号发生翻转后执行。
  • 可以说明信号有效沿是上升沿(posedge)还是下降沿(negedge)。
  • 可以用关键字or指定多个参数。
  1. 电平敏感的时序控制:wait(<expr>)
  • 直至expr值为真时(非零)才执行。
  • 若expr已经为真则立即执行。
module wait_test;
reg clk, waito, edgeo;
initial begin
initial begin clk = 0;edgeo=0;waito=0;end
always #10 clk = ~clk;
always @(clk) #2 edgeo = ~edgeo;
always wait(clk) #2 waito = ~waito;
endmodule

时序图

5.简单延时

在test bench中使用简单延时(#延时)施加激励,或在行为模型中模拟实际延时。

module muxtwo (out, a, b, sl);
      input a, b, sl;
      output out;
      reg out;
   always @( sl or a or b)
      if (! sl)
            #10 out = a; 
// 从a到out延时10个时间单位
      else
            #12 out = b;
//从b到out延时12个时间单位
endmodule

在简单延时中可以使用模块参数parameter,例如产生时钟:

module clock_gen (clk);
      output clk;
      reg clk;
      parameter cycle = 20;
      initial clk = 0;
      always
            #(cycle/2) clk = ~clk;
endmodule

6.边沿敏感时序

时序控制@可以用在RTL级或行为级组合逻辑或时序逻辑描述中。可以用关键字posedge和negedge限定信号敏感边沿。敏感表中可以有多个信号,用关键字or连接。

module reg_ adder (out, a, b, clk);
      input clk;
      input [2: 0] a, b;
      output [3: 0] out;
      reg [3: 0] out;
      reg [3: 0] sum;
   always @( a or b) // 若a或b发生任何变化,执行
      #5 sum = a + b;
   always @( negedge clk) // 在clk下降沿执行
           out = sum;
endmodule

特别注意:事件控制符or和位或操作符 | 及逻辑或操作符 || 没有任何关系。

7.wait语句

wait用于行为级代码中电平敏感的时序控制。
下面 的输出锁存的加法器的行为描述中,使用了用关键字or的边沿敏感时序以及用wait语句描述的电平敏感时序。

module latch_adder (out, a, b, enable);
      input enable;
      input [2: 0] a, b;
      output [3: 0] out;
      reg [3: 0] out;
   always @( a or b)
    begin
            wait (!enable) // 当enable为低电平时执行加法
            out = a + b;
    end
endmodule

特别注意:综合工具还不支持wait语句。

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比 PIP 快 100 倍的安装工具

uv 是一个由 Rust 开发的 pip 工具&#xff0c;比 pip 快 100 倍&#xff0c;难以置信&#xff0c;不过真的是快太多了。 安装 在 Mac 上直接通过 brew install uv 安装即可。 venv 创建运行环境&#xff0c;默认当前目录下 .venv uv venv 依赖安装 uv pip install -r re…

【Mathematica14.0】快速从下载安装到使用

目录 1.简介 2.下载安装 下载 安装 3.一小时掌握mathematica使用 单元模式 内置函数 符号表达式 迭代器 赋值 通配符及查找替换 函数定义 匿名函数&#xff08;拉姆达表达式&#xff09; 函数映射 函数式与运算符 函数自定义选项 图形可视化 交互式界面 数值…

深度神经网络语言识别

「AI秘籍」系列课程&#xff1a; 人工智能应用数学基础人工智能Python基础人工智能基础核心知识人工智能BI核心知识人工智能CV核心知识 使用 DNN 和字符 n-gram 对一段文本的语言进行分类&#xff08;附 Python 代码&#xff09; 资料来源&#xff0c;flaticon&#xff1a;htt…

京东金融大数据分析平台总体架构:剖析和解读

京东金融大数据分析平台总体架构&#xff1a;剖析和解读 在现代金融行业中&#xff0c;大数据分析已成为决策支持和业务创新的重要工具。京东金融凭借其强大的大数据分析平台&#xff0c;成功地将海量数据转化为洞察力&#xff0c;为企业和用户提供优质服务。本文将深入探讨京…

浅谈反射机制

1. 何为反射&#xff1f; 反射&#xff08;Reflection&#xff09;机制指的是程序在运行的时候能够获取自身的信息。具体来说&#xff0c;反射允许程序在运行时获取关于自己代码的各种信息。如果知道一个类的名称或者它的一个实例对象&#xff0c; 就能把这个类的所有方法和变…

VMware替换关键技术:核心业务系统中,访存密集型应用的性能优化

越来越多用户采用虚拟化、超融合以及云平台环境来承载其核心业务&#xff0c;核心业务的高并发对性能的要求尤为严格&#xff0c;在VMware替换的热潮下&#xff0c;原VMware用户也更为关注新平台在核心业务上的性能表现是否对标&#xff0c;或实现超越。深信服将通过系列解析&a…

当心!不要在SpringBoot中再犯这样严重的错误

1. 简介 在Spring Boot中&#xff0c;Configuration注解用于声明配置类&#xff0c;以定义和注册Bean对象。这些Bean对象可以是普通的业务组件&#xff0c;也可以是特殊的处理器&#xff0c;如BeanPostProcessor或BeanFactoryPostProcessor&#xff0c;用于在Spring容器中对其…

OCC显示渲染性能分析及优化方案

1.背景介绍 君方智能设计平台(ShipMaker)&#xff0c;使用OCC中的图形构造功能和图形渲染功能。OCC的图形渲染采用Opengl API 并且将所有图形渲染相关的逻辑放置在TKOpenGL模块中。 性能场景1&#xff1a; 大场景中包含2万个构件&#xff0c;超过300万三角面片时&#xff0c;…

景区智慧公厕解决方案,公厕革命新方式

在智慧旅游的浪潮下&#xff0c;景区智慧公厕解决方案正悄然引领着一场公厕革命&#xff0c;不仅革新了传统公厕的管理模式&#xff0c;更以智能化、人性化的服务理念&#xff0c;为游客提供了前所未有的舒适体验。作为智慧城市建设的重要一环&#xff0c;智慧公厕解决方案正逐…

跟《经济学人》学英文:2024年07月06日这期 Central banks are winning the battle against inflation

Central banks are winning the battle against inflation. But the war is just getting started Politics and protectionism will make life difficult 原文&#xff1a; The trajectory of inflation has not given central bankers much cause for celebration in rece…

时间同步协议详解:从原理到应用的全方位解析

作者介绍 随着信息技术的飞速发展&#xff0c;时间同步技术在通信、导航、电力等多个领域发挥着越来越重要的作用。从日常生活到高精尖的科学实验&#xff0c;精确的时间同步都是确保系统正常运行和任务成功完成的关键因素。本文将对几种主流的时间同步技术进行介绍和对比分析&…

剪画小程序:自媒体工具推荐:视频文案提取!

各位小伙伴&#xff0c;你们好啊&#xff01; 上周五观看《歌手 2024》第八期时&#xff0c;我再次被何炅老师幽默风趣的主持风格所折服。他的每一句话都仿佛带着魔力&#xff0c;让现场气氛热烈非凡&#xff0c;实在令人羡慕不已&#xff01; 何炅老师的口才之所以如此出色&a…

代码随想录算法训练营第四十四天|188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

188.买卖股票的最佳时机IV 题目链接&#xff1a;188.买卖股票的最佳时机IV 文档讲解&#xff1a;代码随想录 状态&#xff1a;不会 思路&#xff1a; 在股票买卖1使用一维dp的基础上&#xff0c;升级成二维的即可。 定义dp[k1][2]&#xff0c;其中 dp[j][0] 表示第j次交易后持…

【Cadence18】如何放置定位孔

在菜单的place->manually会出现Placement对话框&#xff0c; 在Advanced settings中勾选database和library 然后点击Placement list&#xff0c;下拉框中选择Mechanical symbols,勾选你要的定位孔 &#xff08;如下图的HOLE_1_6R00D2R70-PTH&#xff0c;注意&#xff1a;…

相关技术 检测离型纸

网盘 https://pan.baidu.com/s/1W-k4hl9uhjAG98hqJG11ug?pwdcrpn 离型无纺布.pdf 离型纸剥离机构.pdf 离型纸处理装置及贴胶设备.pdf 离型纸收集机构.pdf 离型纸涂布装置.pdf 防伪印刷离型纸的制造工艺.pdf

gitee代码初次上传步骤

ps. 前提是已经下载安装gitee 一、在本地项目目录下空白处右击&#xff0c;选择“Git Bash Here” 二、初始化 git init 三、添加、提交代码&#xff08;注意add与点之间的空格&#xff09; git add . git commit -m 添加注释 四、连接、推送到gitee仓库 git remote add …

E2.【C语言】练习:static部分

#include <stdio.h> int sum(int a) {int c 0;static int b 3;c 1;b 2;return (a b c); } int main() {int i;int a 2;for (i 0; i < 5;i){printf("%d ", sum(a));} } 求执行结果 c是auto类变量(普通的局部变量)&#xff0c;自动产生&#xff0c…

一个项目学习Vue3---Class和Style绑定

看下面一段代码学习此部分内容 <template><button click"stateChang">状态切换</button><div :class"{font-color:classObject.openColor,font-weight:classObject.openWeight}">颜色和粗细变化</div><div :class"…

Java中使用arima预测未来数据

看着已经存在的曲线图数据&#xff0c;想预估下后面曲线图的数据。 import java.util.Vector;public class AR {double[] stdoriginalData{};int p;ARMAMath armamathnew ARMAMath();/*** AR模型* param stdoriginalData* param p //p为MA模型阶数*/public AR(double [] stdori…

通证经济重塑经济格局

在数字化转型的全球浪潮中&#xff0c;通证经济模式犹如一股新兴力量&#xff0c;以其独特的价值传递与共享机制&#xff0c;重塑着经济格局&#xff0c;引领我们步入数字经济的新纪元。 通证&#xff0c;作为这一模式的核心&#xff0c;不仅是权利与权益的数字化凭证&#xf…