当前位置: 首页 > news >正文

verilog 基本语法结构与定义

1、词法约定

        verilog中的基本词法约定与C类似。verilog描述包含一个 单词流 ,这里 单词 可以是 注释、分隔符、数字、字符串、标识符、关键字。 verilog大小写相关,其中关键字全部小写。

        1.1、        空白符

        空白符有空格(\b)制表符(\t)和换行符组成。

        1.2、        注释

a = b & c ; //单行注释
/**/多行注释

        1.3、        操作符

        操作符 有三种类型:单目操作符,双目操作符,三目操作符

        

a = ~b        ;    //单目操作符
a = b && c    ;    //双目操作符
a = b?c:d     ;    //三目操作符

        1.4、      数字声明

        verilog包含两种数字声明,指明位宽的数字 和 不指明位宽的数字。

       二进制:        b

        八进制:       o

        十进制:       d

        十六进制:   h

<size>'<base_format><number>

        负数

-8'd3 ;

         ? 是 z 的另外表示。

     1.5、    字符串

        字符串是由 "  "  引起来的一个字符队列。   

    1.6、        标识符和关键字

        关键字是语言中预留的用于定义语言结构的特殊标识符。

        标识符是程序代码中对象的名字。

    1.7、        转义标识符

        转义标识符 以  \  开始,以空格(空格,制表符,换行符)结束。

2、数据类型

        2.1、        值的种类

        

四值电平逻辑
值的级别硬件电路中的条件
0逻辑0
1逻辑1
x逻辑值不确定,不定态
z高阻态

强度关系
强度等级类型程度
highz高抗阻最弱
small存储
medium存储
weak驱动
large存储
pull驱动
strong驱动
supply驱动最强

        如果两个不同强度的信号驱动同一个线网,则竞争结果为 高强度的值        。

        如果两个相同强度的信号驱动同一个线网,则竞争结果为 不确定值            。

        

        2.2、        线网

        线网(net)表示硬件单元之前的连接。

        线网使用 wire 关键字声明。如果没有显式的说明为 向量 ,则默认线网 宽度为 1 。

        wire 的默认值 为 z 。但是trireg  的默认值 为 x 。

        net包括: wire  wand wor  tri triand  triort trireg

        2.3、        寄存器

        寄存器表示存储元件,他保持原有的值,直到被改写。默认值为  x 。

        寄存器也可以带符号,signed

reg    signed [63:0]    a    ;

        2.4、        向量

        线网 和 寄存器 类型的变量可以声明为 向量(位宽大于1)。

        向量域的选择

[<starting>+:width]
[<starting>-:width]

        demo

reg [255:0]    data1    ;
reg [0:255]    data2    ;
reg [7:0]      byte     ;//选择向量一部分
byte    =    data1[31-:8]    ;//data1[31:24]
byte    =    data1[24+:8]    ;//data1[31:24]
byte    =    data2[31-:8]    ;//data2[24:31]
byte    =    data2[24+:8]    ;//data2[24:31]//起始位可以是变量,但是位宽必须是常量
for(j = 0;j <= 31 ;j=j+1 )beginbyte    =    data1[(j*8)+:8]    ;end

        2.5、        整数、实数、时间寄存器数据类型

        整数:integer

integer i ;
initial
begini = 1 ;
end

        实数:real,默认为0 ;

real    delta
initial
begindelta = 2.13    ;
end

        时间寄存器:time

time    save_sim_time ;
initial
beginsave_sim_time = $time    ;
end

        2.6、        数组

        verilog允许声明 reg integer time real realtime 向量类型的数组,对数组的维度没有限制。

        2.7、        存储器

        在数字电路仿真中,一维数据表示存储器 reg [7:0]  membyte [0:255]

        2.8、        参数

        verilog 使用 parameter        来定义常数,但是值可以改变

        localparam 等同与parameter ,但是值不能改变。

        2.9、        字符串

       字符串 保存在  reg 之中,每个字符占8bit。

        如果位宽大于字符串长度,用0补位

        如果位宽小于字符串长度,截去字符串左边的位。

3、系统任务和编译指令

        3.1、        系统任务

                显示信息:$display()

$display(" hello world ")  ;$display($time)            ;

                监视函数:moniter

        一份code只有最后一个monitor生效

initial
begin#monitor($time,"value of signals clock = %b reset = %b",clock, reset)  ;
end

                暂停和结束仿真:

                暂停:$stop        ;

                结束:$finish         ;

initial
beginclk     = 0    ;reset   = 1    ;#100$stop      ;#100$finish    ;
end

        3.2、        编译指令

        

`define    WORD_SIZE    32    `include    header.v    

 

http://www.lryc.cn/news/546664.html

相关文章:

  • 最节省成本的架构方案:无服务器架构
  • docker利用docker-compose-gpu.yml启动RAGFLOW,文档解析出错【亲测已解决】
  • 字节跳动系统攻防算法岗-Flow安全内推
  • 一些有用的电子书
  • TMS320F28P550SJ9学习笔记1:CCS导入工程以及测试连接单片机仿真器
  • Android中使用Robolectric测试点击事件(不需要手机)
  • 安卓开发相机功能
  • 机器学习:监督学习、无监督学习和强化学习
  • 基于vue3和flask开发的前后端管理系统(一):项目启动准备
  • 一、MySQL备份恢复
  • DeepSeek崛起:如何在云端快速部署你的专属AI助手
  • SQLite Alter 命令详解
  • 2025 聚合易支付完整版PHP网站源码
  • Android开发Android调web的方法
  • FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)
  • 字节跳动发布 Trae AI IDE!支持 DeepSeek R1 V3,AI 编程新时代来了!
  • windows下安装Open Web UI
  • 论文阅读 EEG-Inception
  • 基于opencv消除图片马赛克
  • 计算机毕业设计SpringBoot+Vue.js陕西民俗网(源码+文档+PPT+讲解)
  • 【算法方法总结·三】滑动窗口的一些技巧和注意事项
  • IO的概念和标准IO函数
  • tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)
  • 【流程图】在 .NET (WPF 或 WinForms) 中实现流程图中的连线算法
  • IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题
  • 【流行病学】Melodi-Presto因果关联工具
  • 详细分析KeepAlive的基本知识 并缓存路由(附Demo)
  • 【Go】Go viper 配置模块
  • zabbix“专家坐诊”第277期问答
  • 大模型工程师学习日记(十一):FAISS 高效相似度搜索和密集向量聚类的库