首页 > 其他分享 >【CUMT计算机系统设计】Verilog语法概览

【CUMT计算机系统设计】Verilog语法概览

时间:2023-12-25 16:12:15浏览次数:27  
标签:wire always 概览 999 Verilog 模块 32 CUMT reg

基操

  • 标识符区分大小写,逻辑值不区分

  • 首字符必须为字母/下划线

1. 模块

Module

有I/O功能的黑盒

2.逻辑块

always

  • 构建 组合 and 时序 逻辑块:if, case, for...

  • always @(...)
    begin
    ……
    end

  • 上升沿posedge

  • 下降沿negedge

generate

  • 主要结合for:

  • 对向量多个位重复操作

  • 对同一模块多次重复实例化

initial

  • 初始化

  • 不可综合,不出现在RTL代码中

  • 除了仿真,没太多用途

3.赋值方式

assign

  • 连续

  • 两信号间真实的物理连接

  • 不可在always块中使用

=

  • 阻塞赋值

  • always中使用

  • 顺序执行

<=

  • 非阻塞赋值

  • always中使用

  • 并行执行

基础语法

1.逻辑值与逻辑运算

逻辑值

  • 0

  • 1

  • x:未知状态

  • z:高阻状态

(x/z不区分大小写

逻辑运算

  • 逻辑运算符:&&、== 、|、!=

  • 按位运算符:&、|、、~、^、

  • 归约运算符:&、|、、~、^、

2.常量

  • 十进制整数

  • 基数法

    • 32 ' b(可每四位一下划线,增添可读性

    • 32 ' o

    • 32 '

    • 32 ' h

    • 32位,二/八/十/十六进制

  • 字符串:“ ”

3.注释

  • //:行注释

  • /* */:块注释

  • 同CPP

4.变量

wire

线网型:

  • 电路间的物理连接

  • 其定义的变量可看作信号端口

  • 两wire被assign(连续赋值)时,在逻辑块中会被映射成真实的物理连线

  • assign b = a ;

reg

寄存器型:

  • 抽象的数据存储单元

  • 对某一时间点状态进行保持

  • always、initial中左值均为reg

  • 仅assign中左值为wire

5.向量

//格式:
input/output  wire/reg [upper:lower] vector_name

//输入输出型
input [7:0] a,b,
output reg [7:0] out

// 模块中间向量
wire [7:0] c, e;
reg [7:0] d;

6.分支语句

if-else:

  • if

  • else if

  • else

case:

  • case

  • ... :

  • default :

  • endcase

模块中的参数传递

定义可传递参数的模块:

module counter
// 参数传递
#(
    parameter COUNT_MAX = 25'd24_999_999,
    parameter STATE     = 1'b0            // 多个参数用逗号隔开
)
(
    input  wire  sys_clk,
    output reg led_out
);
// 代码主体
endmodule

带参数模块的实例化:

// 参数传递
#(
   .COUNT_NUM( 25'd24_999_999),        // 传入参数
   .STATE(1'b0)
)
counter1_init      // 实例化模块的名称位置
(
    .sys_clk   (sys_clk),
    .led_out(led_out)
); 

标签:wire,always,概览,999,Verilog,模块,32,CUMT,reg
From: https://www.cnblogs.com/Weenz-y/p/17926291.html

相关文章

  • 全球隐私计算技术发展概览
    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。目前,数字经济正面临着一个巨大的问题。一方面个人数据处理能力的指数级增长创造了一系列前所未有的可能性,人类可以通过人工智能获得非常有价......
  • 【Verilog】编码规范-coding sytle
    目前所在单位并没有代码规范文档,以致于阅读代码很吃力,并且久而久之自己写的代码可读性也没法保证。在参考了很多资料后,决定按以下规范来写:一、命名规范1、文件命名a、每个文件中只包含一个module、class、package,文件名于文件内容名称应相同。 2、module、class、package、f......
  • Verilog 上升沿与下降沿检测
    FPGA中常用的上升沿检测和下降沿检测代码,使用的veriloghdl语言//上升沿检测modulepose_chk(clk,in,out);inputclk,in;outputout;regcurr,last;always@(posedgeclk)begincurr<=in;last<=curr;endassignout=curr&(~last);endmodule//......
  • Verilog的可综合和不可综合
    1、所有综合工具都支持的结构module、endmoduleinput、output、inoutparameter、wire、reg、integer、tri、supply0、supply1assignalways、negedge、posedgebegin、endcase、defaultfor、if、generatefunctionand、nand、or、nor、xor、xnor、buf、not、bufif0、bufif1......
  • Java基础知识概览总结
    1.Java语法数据类型:Java中的基本数据类型包括整型、浮点型、字符型和布尔型,而引用类型包括类、接口和数组等。变量和常量:使用关键字var、final和static声明变量和常量。运算符:包括算术运算符、比较运算符、逻辑运算符和位运算符等。控制流程:使用条件语句(if-else、switch)、循环......
  • verilog学习笔记1
    第一课的学习任务是:①搞清楚常用语法,重点是赋值方式这部分,对应实际电路和实现的思路②能够写出ppt里的简单程序③会使用modelsim软件、编写testbench,验证自己的代码 一、数据流建模1、连续赋值语句格式是assigna=xxx;被赋值的变量必须是wire类型语句定义了逻辑关系,可以......
  • verilog设计行为仿真和时序仿真不一致, 原来是敏感信号的问题
    描述最近在vivado中设计一个计算器:28bit有符号加减法,结果出现行为仿真和时序仿真不一致情况代码r_a,r_b:对计算数据a,b的寄存器存储,也是计算器的数据输入s_bit:符号位cout:28bit计算器的进位输出cout[27]:最高位进位,用来判断符号以及加法进位always@(a,b......
  • .NET企业应用安全开发动向-概览
    太长不读版:试图从安全的全局视角触发,探讨安全的重要性,讨论如何识别安全问题的方法,介绍.NET提供的与安全相关的基础设施,以及一些与时俱进的安全问题,为读者建立体系化的安全思考框架。引言关于“安全”二字,“一千个读者有一个哈姆雷特”,有人说安全就是杀毒软件,有人说安全就是第三......
  • m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench
    1.算法仿真效果vivado2019.2仿真结果如下:CP加入,删除效果:系统RTL结构图:2.算法涉及理论知识概要正交频分复用(OrthogonalFrequencyDivisionMultiplexing,OFDM)是一种高效的无线通信技术,已经被广泛应用于无线通信领域。OFDM技术的主要优势在于其可以有效地抵抗多径效应和频率......
  • m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench
    1.算法仿真效果vivado2019.2仿真结果如下:   CP加入,删除效果:   系统RTL结构图:   2.算法涉及理论知识概要          正交频分复用(OrthogonalFrequencyDivisionMultiplexing,OFDM)是一种高效的无线通信技术,已经被广泛应用于无线通信领域。OFDM......