网易企业邮箱账号/重庆seo推广服务

网易企业邮箱账号,重庆seo推广服务,只做av搬运工的网站,安卓app软件公司1.1 结构语句 结构语句主要是initial语句和always语句,initial 语句它在模块中只执行一次,而always语句则不断重复执行,以下是一个比较好解释的图: (图片来源于知乎博主罗成,画的很好很直观!) 1.1.1 initial语句 ini…

1.1 结构语句

结构语句主要是initial语句和always语句,initial 语句它在模块中只执行一次,而always语句则不断重复执行,以下是一个比较好解释的图:

(图片来源于知乎博主罗成,画的很好很直观!)

1.1.1 initial语句

initial 语句它在模块中只执行一次

它常用于测试文件的编写,用来产生仿真测试信号(激励信号),或者用于对存储器变量赋初值。

语法格式:

initial begin
   
...
end

PS:当initial与语句内只有一个执行语句时,可以省略begin..end。

1.1.2 always语句

always 语句一直在不断地重复活动,但是只有和一定的时间控制结合在一起才有作用。

语法格式:

always @ (敏感列表) begin
    ...
end


PS:敏感列表即触发always语句执行的条件,多个触发条件用or连接。同样,当always语句内只有一个执行语句时,可以省略begin..end。


always语句可用于组合逻辑也可用于时序逻辑,电平触发往往是组合逻辑,边沿触发往往是时序逻辑,因此可进一步细分:

(1)电平触发——组合逻辑:

        这个程序表示每当信号abcdefghm的值(即电平变化)发生变化时,always块中的所有语句都会被执行 。

         如果组合逻辑块语句的输入变量很多,可简写以下形式,@(*)表示对后面语句块中所有输入变量的变化都是敏感的(即所有变量有任何一个变化就执行always语句。)

(2)边沿触发——时序逻辑:

当检测到边沿时,执行always语句,如:

posedge 和 negedge为关键字,分别表示上升沿和下降沿,这个程序表示当 sys_clk为上升沿或者 sys_ret_n为下降沿时,执行always语句。

1.1.3 实例理解

 理解:

initial语句中定义了三个信号,sys_clk,sys_rst_n, touch_key,以sys_rst_n, touch_key为例,波形图对应为第二行和第三行。以下操作只执行了一次。

  • 首先sys_rst_n, touch_key均赋值为0(程序从注释开始算第3行和第5行);
  • 代码第6行,延迟20ns后,sys_rst_n赋值为1,对应于波形图中红色线(20ns时刻)时sys_rst_n信号由低电平跳变至高电平。
  • 代码第7行,又延迟10ns后,即30ns处(蓝色线),touch_key赋值为1
  • 代码第8~10行,touch_key类似操作。

always语句则不断重复操作,每延迟10ns,sys_clk就取反一次,故波形图上(第一行)对应为产生一个周期信号。

1.2 赋值语句

1.2.1  阻塞赋值 “ = ”

        阻塞赋值可以认为只有一个步骤的操作:即计算 RHS 并更新LHS(RHS为式子右边,LHS为式子左边)。
        所谓阻塞的概念是指,在同一个always块中:后面的赋值语句是在前一句赋值语句结束后才开始赋值的。

以上例子理解:

当clk信号为上升沿或者rest_n信号处于下降沿时,执行操作。

  • 在波形图部分,从-6时刻开始,直接clk信号上升沿,且满足rest_n为低电平,执行if语句,故abc分别赋值为1,2,3。
  • 然后 -6 ~ 0时刻,rest_n恒为低电平,每到clk信号上升沿,执行操作中if语句,故-6 ~ 0时刻abc值恒为1,2,3。
  • 0时刻时,rest_n跳变为高电平,是上升沿不是下降沿,故不执行操作。
  • 0时刻后,rest_n恒为高电平,clk信号第一个上升沿为2时刻,执行操作,此时不满足if语句(rest_n为高电平),则执行else语句。由于赋值语句是在前一句赋值语句结束后才开始赋值的,故a=0执行完后,b = a = 0执行完, 在执行c = b = 0;
  • 2时刻后rest_n恒为高电平,每到clk信号上升沿,执行操作中else语句,故此后abc值都为0。

1.2.2  非阻塞赋值 “ <=”

        非阻塞赋值的操作过程可以看作两个步骤:(1)赋值开始的时候,计算RHS;(2)赋值结束的时候,更新LHS
        非阻塞赋值可以理解为:第一条非阻塞赋值语句开始时,所有非阻塞语句同时赋值计算好对应的RHS并保存放置一边,全部计算好后,再将各自保存好的RHS传递到对应的LHS中。
        非阻寒赋值只能用于对寄存器类型的变量进行赋值:因此只能用在initial块和always块等过程块中。

以上例子与1.1.1中例子只有阻塞赋值与非阻塞赋值的区别:

同理,当clk信号为上升沿或者rest_n信号处于下降沿时,执行操作。

  • 在波形图部分,从-6时刻开始,直接clk信号上升沿,且满足rest_n为低电平,执行if语句,赋值语句右边为1,2,3然后对应赋值到abc上。
  • 然后 -6 ~ 0时刻,rest_n恒为低电平,每到clk信号上升沿,执行操作中if语句,故-6 ~ 0时刻abc值恒为1,2,3。
  • 0时刻时,rest_n跳变为高电平,是上升沿不是下降沿,故不执行操作。
  • 0时刻后,rest_n恒为高电平,clk信号第一个上升沿为2时刻,执行操作,此时不满足if语句(rest_n为高电平),则执行else语句。赋值语句右边0,a(值为1),b(值为2)【由于此时ab值为临近2时刻的值】,则对应将其赋值到abc上得到a=0,b=1,c=2
  • 2时刻后rest_n恒为高电平,4时刻又到了clk信号上升沿,执行操作中else语句,。赋值语句右边0,a(值为0),b(值为1)【由于此时ab值为临近4时刻的值】,则对应将其赋值到abc上得到a=0,b=0,c=1;
  • 2时刻后rest_n恒为高电平,6时刻又到了clk信号上升沿,执行操作中else语句。赋值语句右边0,a(值为0),b(值为0)【由于此时ab值为临近6时刻的值】,则对应将其赋值到abc上得到a=0,b=0,c=0;
  • 此后,abc都为0,按照非阻塞也为0了。

1.3 条件语句

条件语句必须在过程块语句中使用,即是指由initial和always语向引导的块语句。

1.3.1 if语句

使用方法类似于C语言。

  • 允许一定形式的简写, if(a) 等同于 if(a==1);if(!a) 等同于 if(a!=1)
  • if语句对表达式的值进行判断,若为0,x,z则按假处理:若为1,按真处理:
  • if和else后面的操作语句可以用begin和end包含多个语句。
  • 允许if语句的嵌套。

1.3.2 case语句

case (<expression>)
    case1 :     ...
    case2:   ...
    case3 :     ...
    case4 :     begin
                          <multiple statements>
                        end
    default: <statement>
endcase


语法解释:

  • 其中,case1~case4这些写的是情况1~4,或者说是看<expression>符合case1~case4的哪一种情况,对应进入执行该情况;
  • default表示如果没有expression没有匹配的 case 情况,执行 default 语句;
  • 看case4知,如果情况中有多个执行语句,用begin..end来写。    

注意点:

  • 分支表达式的值互不相同(即每种情况应不同,不然编译会出现矛盾)
  • 所有表达式的位宽必须相等不能用:bx 来代替:n'bx

除此之外还有另外两种表达:casez...endcasecasex...endcase

casez不考虑表达式中的高阻值比较时;casex:不考虑高阻值之和不定值x。

例如:以下例子判定sel的值是否满足以下哪种情况,情况1是8’b1100_zzzz,其中后四位“zzzz”为高阻值不用考虑,即只需要看前4位是否与sel的值相匹配;情况2是8’b1100_xxzz,后两位才是高阻值不用考虑,看前6位是否与sel匹配。sel=1100_0011,可知前4位与情况1匹配,前6位与情况2不匹配,故进入情况1。

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

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

相关文章

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信&#xff08;未成功版&#xff09; 上次说基于UDP的打洞程序改了五版一直没有成功&#xff0c;要写一下问题所在&#xff0c;但是我后续又查询了一些资料&#xff0c;成功实现了&#xff0c;这次先写一下未成功的…

【Python编程】高性能Python Web服务部署架构解析

一、FastAPI 与 Uvicorn/Gunicorn 的协同 1. 开发环境&#xff1a;Uvicorn 直接驱动 作用&#xff1a;Uvicorn 作为 ASGI 服务器&#xff0c;原生支持 FastAPI 的异步特性&#xff0c;提供热重载&#xff08;--reload&#xff09;和高效异步请求处理。 启动命令&#xff1a; u…

前端权限流程(基于rbac实现思想)

1. 权限控制 1.1. 实现思想 基于rbac权限控制思想实现&#xff0c;给用户分配角色&#xff0c;给角色分配权限 给用户分配角色业务 注意&#xff1a;上方图片是个示例图&#xff0c;代表给用户分配职位(角色)&#xff0c;页面中使用了Element-plus的el- checkbox组件…

软件高级架构师 - 软件工程

补充中 测试 测试类型 静态测试 动态测试 测试阶段 单元测试中&#xff0c;包含性能测试&#xff0c;如下&#xff1a; 集成测试中&#xff0c;包含以下&#xff1a; 维护 遗留系统处置 高水平低价值&#xff1a;采取集成 对于这类系统&#xff0c;采取 集成 的方式&…

python3.13安装教程【2025】python3.13超详细图文教程(包含安装包)

文章目录 前言一、python3.13安装包下载二、Python 3.13安装步骤三、Python3.13验证 前言 本教程将为你详细介绍 Python 3.13 python3.13安装教程&#xff0c;帮助你顺利搭建起 Python 3.13 开发环境&#xff0c;快速投身于 Python 编程的精彩实践中。 一、python3.13安装包下…

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.5 渲染流程(上):HTML、CSS和JavaScript,是如何变成页面的?

https://time.geekbang.org/column/article/118205 2.5 渲染流程&#xff08;上&#xff09;&#xff1a;HTML、CSS和JavaScript&#xff0c;是如何变成页面的&#xff1f; 2.4讲了导航相关的流程&#xff0c;那导航被提交后又会怎么样呢&#xff1f; 就进入了渲染阶段。 这…

CMake学习笔记(一):工程的新建和如何将源文件生成二进制文件

cmake是我们在工作过程中比较常见的一个工具&#xff0c;该系列文章是自己用来学习的笔记。目前只是记录下自己学习cmake的过程中的一些重要的知识点&#xff0c;其是以项目需求为导向并非完整的cmake的学习路线和系统&#xff0c;同样也并非适合所有的人。 1.生成一个可执行文…

重定位(1)

一、重定位 1、对于有强大ROM的板子&#xff0c;他们会将上电后的程序放到指定RAM内存 2、无强大片内ROM的板子&#xff0c;自己编程序让他知道RAM内存指定位置 指定位置&#xff1a;就是链接地址&#xff0c;指定哪里&#xff0c;哪里就被编译好一块内存用来存放上电的程序 …

自由学习记录(41)

代理服务器的核心功能是在客户端&#xff08;用户设备&#xff09;和目标服务器&#xff08;网站/资源服务器&#xff09;之间充当“中介”&#xff0c;具体过程如下&#xff1a; 代理服务器的工作流程 当客户端希望访问某个网站&#xff08;比如 example.com&#xff09;时&…

Linux+apache之 浏览器访问云服务器磁盘的图片,通过tomcat

https://javab.blog.csdn.net/article/details/80580520 安装tomcact 修改添加 <Context docBase"/home/wyp/images" path"/img" debug"0" reloadable"true" />修改完成后保存重启tomcat服务。 测试访问方式&#xff1a;http…

LIUNX学习-线程

线程概念 一个进程需要访的大部分资源&#xff0c;诸如自身的代码、数据、new\malloc的空间数据、命令行参数和环境变量、动态库、甚至是系统调用访问内核代码…都是通过虚拟地址空间来访问的。换而言之&#xff0c;进程地址空间是进程的资源窗口&#xff01;&#xff01;   …

1.Big-endian/ little endian大端对齐、小端对齐

一、大端模式、小端模式的介绍 Little endian&#xff1a;是低位字节排放在内存的低地址端、高位字节排放在内存的高地址端。 Big-endian&#xff1a;是高位字节排放在内存的低地址端、低位字节排放在内存的高地址端。 西门子是大端模式&#xff0c;因为比如 MW100 MB100(高位…

SpringBoot Actuator

SpringBoot Actuator 一、简介二、入门1、依赖2、默认监控指标3、查询监控指标4、全量监控指标 三、Spring Boot Admin1、主要功能2、Admin3、Client4、应用墙5、其他 四、定制化1、定制Health端点2、定制Info端点3、定制Metrics端点4、定制Endpoint端点 一、简介 SpringBoot自…

06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 一、代码结构概览二、详细代码解析1. 数据源管理实现2. 数据结构定义3. 优化的列表项组件4. 主列表组件实现 一、代码结构概览 本文将详细解…

vscode 查看3d

目录 1. vscode-3d-preview obj查看ok 2. vscode-obj-viewer 没找到这个插件&#xff1a; 3. 3D Viewer for Vscode 查看obj失败 1. vscode-3d-preview obj查看ok 可以查看obj 显示过程&#xff1a;开始是绿屏&#xff0c;过了1到2秒&#xff0c;后来就正常看了。 2. vsc…

excel 斜向拆分单元格

右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后&#xff0c;你可以开始输入文字。 需要注意的是&#xff0c;文字并不会自动分成上下两行。 为了达到你期望的效果&#xff0c;你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…

家政保洁维修行业有没有必要做小程序?

【家政创业必看】家政行业小程序值得做吗&#xff1f;4大核心优势告诉你&#xff01; 随时随地下单&#xff1a;客户手机一键预约&#xff0c;告别找电话/翻页面的麻烦 品牌专业升级&#xff1a;精美界面服务详情用户评价&#xff0c;打造可信赖形象 营销神器&#xff1…

libcoap在Ubuntu下的编译(基于CMake)

引言 libcoap 是一个开源的轻量级 C 语言库&#xff0c;用于实现 CoAP&#xff08;Constrained Application Protocol&#xff0c;受限应用协议&#xff09;。CoAP 是一种专为资源受限设备设计的轻量级通信协议&#xff0c;适用于物联网&#xff08;IoT&#xff09;和嵌入式系…

VSCode知名主题带毒 安装量900万次

目前微软已经从 Visual Studio Marketplace 中删除非常流行的主题扩展 Material Theme Free 和 Material Theme Icons&#xff0c;微软称这些主题扩展包含恶意代码。 统计显示这些扩展程序的安装总次数近 900 万次&#xff0c;在微软实施删除后现在已安装这些扩展的开发者也会…

如何快速的解除oracle dataguard

有些时候&#xff0c;我们为了使oracle dg的standby库另做他用&#xff0c;需要解除oracle dataguard数据同步。我本地因为standby库存储出现故障&#xff0c;导致dg存在问题&#xff0c;故需要解除。今天&#xff0c;我们通过使用部分命令&#xff0c;实现dg的快速解除。 1&a…