首页 > 其他分享 >Verilog基本语法(三)建模

Verilog基本语法(三)建模

时间:2023-01-23 13:11:08浏览次数:51  
标签:语句 out1 clock 建模 in1 语法 b0 Verilog count

门级建模

wire out1, in1, in2;

// 与门(and)和或门(or)
and a1(out1, in1, in2); // 与门
nand na1(out1, in1, in2); // 与非门
or or1(out1, in1, in2); // 或门
nor nor1(out1, in1, in2); // 或非门
xor x1(out1, in1, in2); // 异或门
xnor nx1(out1, in1, in2); // 同或门

// 缓冲器和非门
buf b1(out1, in1); // 缓冲器
not n1(out1, in1); // 非门

数据流建模

wire out1;
assign out1 = in1 & in2;

assign addr [15:0] = addr1_bits[15:0] ^ addr2_bits[15:0];

assign {c_out, sum[3:0]} = a[3:0] + b[3:0] + c_in;

// 隐式赋值
wire out2 = in1 & in2;

行为级建模

reg clock, reset, x, y;
integer count;
reg [15:0] reg_a, reg_b;

结构化过程语句

initial // initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。
begin // 如果块内只包含一条语句,不需要使用begin...end。
    // TODO
end

always // always块从仿真0时刻开始执行,并且循环往复地执行块中的语句。
    #10 clock = ~clock;

赋值语句

// =:阻塞式赋值语句
x = 1'b0; 
reg_a = 16'b0; // 向量初始化。
reg_a [15:13] = {1'b0,1'b0,1'b0};

// <=:非阻塞式赋值语句
reg_a [2] <= 1'b1;
reg_a [3] <= #15 1'b1; // 带延迟的位选赋值。
x <= 1'b1; 
y <= 0;
y <= @(negedge clock) x ^ y;

时序控制

// 时序控制
parameter latency = 20;
parameter delta = 2;

initial begin
    #10 y = 1'b0;
    #latency x = 1'b0;
    #(latency+delta) x = 1'b0;
end

@(clock) x = 1'b0; // 只要clock的值改变,就执行x=1语句。
@(posedge clock) x = 1'b0; // 只要clock的值发生正向跳变,就执行x=1。
@(negedge clock) x = 1'b0; // 只要clock的值发生负向跳变,就执行x=1。
x = @(posedge clock) 1'b0; // 立即赋值,在clock的值发生正向跳变时刻赋值给x。

// or事件控制
always @(clock or reset) begin // 等待clock或reset输入信号的改变,这里or也可以用“,”代替。
// always @(clock, reset) begin 
    // TODO
end

// @*操作符的使用
always @(*) // @(*)把所有输入变量都包括进敏感列表。
begin
    // TODO
end

条件控制与多路分支语句

// 条件语句
if (clock)
    x = 1'b0;
else 
    y = 1'b1;

// 多路分支语句
case  (x)
    2'b00: y = 1'b0;
    2'b01: y = 1'b1;
    2'b10, 2'b11: begin
        y = 1'b0;
        y = 1'b1;
    end
endcase

循环语句

// 循环语句
initial begin
    while (count < 10) // while 循环
        count = count + 1;

    for (count = 0; count < 10; count = count + 1) // for 循环
        $display("Count = %d", count);

    repeat (10); // repeat 循环,此例为循环10次。
end

顺序块和并行块

顺序块和并行块的区别:当控制转移到块语句的时刻,并行块中所有的语句同时开始执行,语句之间的先后顺序是无关紧要的。

// 顺序块
begin : block1 // 名字为block1的顺序命名块。
integer i; // 整型变量i是block1命名块的静态本地变量,可以通过层次名top.block1.i被其他模块访问。
    //TODO
end

// 并行块
fork
    x = 1'b0;
    #5 y = 1'b1;
join

 

标签:语句,out1,clock,建模,in1,语法,b0,Verilog,count
From: https://www.cnblogs.com/vicky2021/p/17038772.html

相关文章

  • SQL语法
    1.SELECT从数据库中选取数据,一般用来指定列的范围SELECT18ASage//将列表名重命名为age2.From用来指定来源,一般为数据库、表名3.WHERE用来过滤符......
  • C++ 基础语法2
    #include<iostream>usingnamespacestd;#include<string>#include<time.h>//结构体定义//structStudent//{//stringname;//intage;//intcount;//};//在结构体尾......
  • C++基础语法 3(面向对象、C++在执行过程当中4个区域、引用)
    #include<iostream>usingnamespacestd;//标注空间#include<string>#include<time.h>#include<cstdlib>//面向对象/*C++在执行过程当中4个区域:代码区:存放二进制代码,由操作......
  • C++基础语法4()
    #include<iostream>usingnamespacestd;//标注空间#include<string>#include<time.h>#include<cstdlib>//函数的提高1;函数的默认参数函数的形参可以有默认值!返回类型......
  • C++ 基础语法5(封装、访问权限)
    #include<iostream>usingnamespacestd;//标注空间#include<string>#include<time.h>#include<cstdlib>//C++当中面向对象三大特性:封装、继承、多态//C++当中万事万物都能......
  • DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)
    1.简介  日常开发中需要查询Elasticsearch中的数据时,一般会采用RestHighLevelClient高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如:Mysql、PostgreSQL......
  • Markdown语法学习 精简版
    Markdown语法学习精简版文章开头介绍一下Markdown:Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。Markdown语言在2004由约翰·格鲁......
  • MarkDown语法
    一级标题二级标题粗体斜体斜体加粗删除线引用效果三级标题[超链接](试用)表格名字性别张三男代码HappyNewyear......
  • markdown基本语法
    markdown是一种轻量级标记语言,很适合用于排版。这篇博文将介绍markdown的基本语法,掌握之后就可以用markdown来记录和展示啦。1.标题与正文一级标题二级标题三级标题......
  • MarkDown语法
    Markdown语法标题要创建标题,请在单词或短语前面添加井号(#),#的数量代表了标题的级别。段落要创建段落,请使用空白行将一行或多行文本进行分隔。不要用空格或制表符......