首页 > 其他分享 >Verilog 语句

Verilog 语句

时间:2023-03-02 22:36:03浏览次数:33  
标签:语句 ... begin wire end Verilog reg

可综合语句

Module ... endmodule

Module(clk,a,b,c,d);

    input clk;
    input [2:0] a,b;
    output b;
    inout e;

endmodule
  1. module 括号声明所有输入和输出信号。不要忘记 ;
  2. 模块里要声明所有输入和输出:
    • input [2:0] a; 表示端口 a 是 2bit 的 wire 型
    • output b 表示 1bit 的 wire 型
    • inout 是双向端口

parameter

parameter 声明常量。eg,parameter a = 3'b101;

wire, reg

  • inputoutput 只能是 wire型 。
  • inout 可以是 wire 也可以是 reg 型。

reg 是寄存器,定义的信号通常会综合成一个寄存器。 wire`则是两个 reg 之间的连线。

wire 型赋值有:

  1. wire a; 定义一个 wire 信号
  2. wire b = c; 给 b 连续赋值
  3. wire b = 2'b11; 赋值给 b 一个多bit的 wire 信号
  4. wire [3:0] c; 定义一个 4bit 的 wire 信号

reg 型赋值有:

  1. reg a; 定义一个 reg 信号
  2. reg b = 2'b01; 定义 b 并赋初值
  3. reg [3:0] c; 定义一个 4bit 的 reg 信号。可以赋初值, reg [3:0] c = 4'b0110;
  4. reg [3:0] d [2:0] 定义一个二维的,3 个 4bit 的reg 信号。

assign

asssign a = b;

连接 a 和 b 信号,或者给 a 赋值

begin ... end

多语句定义,顺序块

begin:a1 //块名

end
begin

end

always

always@(*) begin ... end

只要条件满足,循环执行。
敏感表取 posedge/negedge 上升沿/下降沿,电平信号触发,可以是多个条件,用 andor

()?():()

用的很多。

判断条件 : 判断为真执行此语句 : 判断为加执行此语句

function ... endfunction

  • 不能包含有时间控制语句,# @ wait 等。

  • 函数定义只能在模块( module )中,不能在过程块( always initial )中

  • 函数中不能出现过程块语句

  • 函数内部可以调用函数,不能调用任务

  1. 函数的定义
founction [3:0] fc; //函数返回值位宽不指定时为1, fc 是函数名

input [3:0] A, B;   //定义输入变量,指定位宽和类型。至少要有一个输入端。可以是双向端口

reg S, Cout;    //用到了 S 和 Cout 寄存器变量

begin
    //函数体
end

endfounction
  1. 函数的调用

fc(A, B)

函数名(输入端口) 调用的参数只有输入端口

task ... endtask

  • 任务可以调佣任务(包括本身),也可以调用函数

  • 可以包含时间语句,比如用定时,repeat(8) @(posedge clock); 等待8个上升沿

  • 可以没有输入,输出等端口,与函数不同(至少一个输入端口)

  • 内部不能有过程块(always initial)

  1. 任务的定义
task t0;
input a, b;
inout c;
output d, e;

begin
执行语句;
end

endtask
  1. 任务的调用

task t0(输入端口, 输出端口, 双向端口) 与上述顺序一致

define

`define NUM 3'd5

定义常量,注意没有分号

if ... else

if(判断语句1) //分支1

else if(判断语句2) //分支2

else(判断语句3) //分支3
begin   //多语句

end

case ... endcase

case(a) //a 是要判断的变量

3'b000 :执行语句1;
取值2 :执行语句2;
取值3, 取值4 :执行语句3;
defualt:无上执行此语句;

endcase

for

for(a=16'b01; a<10; a = a+1)
begin

end
  1. a 取初值
  2. 判断 a>10 ,逻辑为 1 执行下方语句
  3. 再执行 a=a+1 ,判断是否执行,不断循环。

generate

repeat

repeat(循环次数) 执行语句; 或者 repeat(判断语句) begin ... end

循环次数可以是常量、变量、表达式。

while

while(表达式) begin ... end

表达式成立则执行循环语句

不可综合语句

initial

forever

forever 语句; 或者 forever begin ... end 常用来产生周期性波形。必须写在 initial 块中

fork

time

wait

delays

标签:语句,...,begin,wire,end,Verilog,reg
From: https://www.cnblogs.com/accumulagain/p/17173825.html

相关文章

  • KingbaseES 数据表复制语句的功能差异
    Kingbase数据表复制操作数据库使用过成中,经常会遇到在现有的表结构基础上,对表结构进行复制。在KingbaseES数据库可以采用selectinto,createtableasselect,createtable......
  • 工作几种常用数据库操作sql语句
    改变字段顺序的方法:移动字段到某字段的后面altertable表名modify字段名字段类型after字段eg:altertableusermodifypswvarchar(32)aftername;、删除表字段......
  • 分时问候——时间类、if语句
    importjava.time.LocalTime;publicclassHello{publicstaticvoidmain(String[]args){LocalTimenow=LocalTime.now();inthour=now......
  • 汇编语言语句格式
    通常一个语句常占一行(支持续行符“\”)一个语句不超过132个字符,4个部分执行性语句:表达处理器指令,实现功能标号:硬指令助记符操作数,操作数;注释说明性语句:表达伪指令,控......
  • MySQL 查询常用操作(0) —— 查询语句的执行顺序
    MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having后面是否可以使用select中重命名的列名等问题。另外SQL中实际使用最频繁的就是查......
  • 日志系统:一条SQL更新语句执行过程
    更新流程假如有个表和一条更新语句mysql>createtableT(IDintprimarykey,cint);mysql>updateTsetc=c+1whereID=2;更新语句会走一遍查询语句的流程,分析......
  • SQL 多表关联更新语句
    A表WHERE条件来自B表查询结果集UPDATEaSETa.is_sync=0FROMA表aLEFTJOINB表bONa.order_id=b.order_idANDa.line_no=b.order_line_no......
  • 04if分支语句
    if条件语句if语句if条件语法结构:if条件语句:满足条件运行的代码1满足条件运行的代码2...ps:条件语句(可以是单个数据,即本身就是布尔类型)需返回一个布尔类型,判断是......
  • oracle上一些查询表和字段语句
    oracle上一些查询表和字段语句--查询表空间中表数据占用情况语句1SELECT2OWNER3,TABLESPACE_NAME4,SEGMENT_NAME5,SUM(BYTES)/1024......
  • merge into 批量修改语句
      A表通过关联B表,去修改A表本身语法: mergeintoAusingBon(A.a=B.a)    --关联关系whenmatchedthen      --当匹配上,则使用该行数......