行为级建模

news2025/3/11 14:15:39

1、结构化过程语句

        verilog有两种结构化过程语句:  always    initial

        verilog本质上是并发的。

//声明初值


//方法一
reg    clk    ;
initial
    clk = 1'b0    ;


//方法二
reg    clk = 1'b0    ;

 

2、过程赋值语句

                        阻塞赋值

                       非阻塞赋值

        非阻塞赋值可以避免竞争:

        第一种阻塞赋值会产生竞争的情况,a = b b = a 执行的先后取决与仿真器。

        第二种非阻塞赋值避免了竞争,达到了 交换 a  b 的效果。

//阻塞赋值
always@( posedge clk )
    begin
        a = b ;
    end
always@( posedge clk )
    begin
        b = a ;
    end


//非阻塞赋值
always@( posedge clk )
    begin
        a <= b ;
    end
always@( posedge clk )
    begin
        b <= a ;
    end

3、时序控制

        verilog提供三种时序控制方法:

                                基于延迟的时序控制、基于事件的时序控制、电平敏感的时序控制

        基于延迟的时序控制      

initial
    begin
        x = 1'b0    ;
        #10
        x = 1'b1    ;
    end

        基于事件的时序控制

                常规事件控制、命名事件控制、or事件控制、电平敏感时序控制

//命名事件控制

event    received_data    ;

always@( posedge clk )
    begin
        if( last_data )
            begin
                ->received_data       ;
            end
    end

always@( received_data )
    begin
        data = .........    ;
    end

        ->received_data 表示事件的触发。关键词  event  表示  事件 。  

        电平敏感的时序控制

always
    wait(count_enable)  #20 count = count + 1'b1    ;

当 count_enable为 1 的时候执行,为0的时候仿真会不执行后面的语句,会停顿下来。

4、条件语句

if(      )
    begin
    end
else if(   )
    begin
    end
else
    begin
    end

5、多支路语句

        case casex casez

always@( posedge clk )
    begin
        case( {s1,s0} )
        2'd0:    out = in1    ;
        2'd1:    out = in2    ;
        2'd2:    out = in3    ;
        2'd3:    out = in4    ;
        default: out = in1    ;
        endcase
    end

6、循环语句

        while                 for                        repeat                       forever

        

//while

while(  )
    begin

    end

//for

for( ;  ; )
    begin

    end

//repeat

repeat(128)    ;//循环128次


//foreber

initial
    begin
        forever #10  clk = ~clk ;
    end

7、顺序块和并行块

        顺序块:语句按照顺序执行。

                begin    end

                1、语句一条一条执行、

                2、延迟 是相对于前面那条语句的完成时间。

        并行块:所有语句一起执行。

                fork    join

        块语句的命名:

always@( posedge clk )
    begin:xxxxxxxx

    end

         块的禁用:disable

initial
    begin
        i = 0 ;
        begin: block1
            while( i < 16 )
            begin
                if(  )
                begin
                    disable    block1    ;
                end
            end
        end    
    end

8、生成块

        

genvar    i ;

generate    for( i = 0 ;i < 100 ;i=i+1 )
    begin
        
    end
endgenerate

9、demo  交通信号灯

code:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/03/07 15:34:34
// Design Name: 
// Module Name: sig_control
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

`define TURE    1'b1   
`define FALSE   1'b0

//延迟
`define Y2R_DELAY   3
`define R2G_DELAY   2

module sig_control(
        output  reg    [1:0]   hwy         ,
        output  reg    [1:0]   cntry       ,
        
        input   wire            x           ,
        input   wire            clk         ,
        input   wire            rst_n       
    );
    
    parameter   RED     =   2'd0    ;
    parameter   YELLOW  =   2'd1    ;
    parameter   GREEN   =   2'd2    ;
    
    //定义状态                         HEW      CNTRY
    parameter   S0  =   3'd0    ;//green        red
    parameter   S1  =   3'd1    ;//yellow       red
    parameter   S2  =   3'd2    ;//red          red
    parameter   S3  =   3'd3    ;//red          green
    parameter   S4  =   3'd4    ;// red         yellow
    
    reg [2:0]   state           ;
    reg [2:0]   next_state      ;
    
    always@( posedge clk or negedge rst_n )
    begin
        if( rst_n == 0 )
        begin
            state <= S0 ;
        end
        else
        begin
            state <= next_state ;
        end   
    end
    
    always@(*)
    begin
        case( state )
            S0:
                begin
                    if( x == 1 )
                    begin
                        next_state =    S1  ;
                    end
                    else
                    begin
                        next_state  =   S0  ;
                    end
                end
            S1:
                begin
                    repeat(`Y2R_DELAY) @(posedge clk)   ;
                    next_state  =   S2  ;
                end
            S2:
                begin
                    repeat(`R2G_DELAY) @(posedge clk)   ;
                    next_state  =   S3  ;                    
                end
            S3:
                begin
                    if( x == 1 )
                    begin
                        next_state = S3 ;
                    end
                    else
                    begin
                         next_state = S4 ;                       
                    end
                end
            S4:
                begin
                    repeat(`Y2R_DELAY) @( posedge clk )   ;
                    next_state  =   S0  ;
                end
            default:
                begin
                    next_state  =   S0  ;
                end
        endcase
    end    
    
    always@( posedge clk )
    begin

        case( state )
               S0:
                    begin
                        hwy    <=  GREEN        ;
                        cntry  <=  RED          ;
                    end
               S1:
                    begin
                        hwy    <=  YELLOW        ;
                        cntry  <=  RED           ;
                    end
               S2:
                    begin
                        hwy    <=  RED         ;
                        cntry  <=  RED         ;
                    end
               S3:
                    begin
                        hwy    <=  RED         ;
                        cntry  <=  GREEN       ;
                    end
               S4:
                    begin
                        hwy    <=  RED         ;
                        cntry  <=  ~YELLOW     ;
                    end
               default:
                    begin
                        hwy    <=  GREEN       ;
                        cntry  <=  RED         ;
                    end
        endcase 
    end   
    
endmodule

tb

 

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2025/03/07 15:35:01
// Design Name: 
// Module Name: tb_sig_control
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_sig_control();

    wire [1:0]  MAIN_SIG ,CNTRY_SIG     ;
    reg         CAR_ON_CNTRY_RD         ;
    reg         clk,rst_n                 ;
    
    sig_control sig_control_inst
    (
        .hwy        (MAIN_SIG)          ,
        .cntry      (CNTRY_SIG)         ,
        .x          (CAR_ON_CNTRY_RD)   ,
        .clk        (clk)               ,
        .rst_n      (rst_n)
    );
    
    initial
    begin:monitor
        $monitor($time,"Main_sig = %b   Cntry_sig = %b CAR_ON_CNTRY_RD = %b ",MAIN_SIG,CNTRY_SIG,CAR_ON_CNTRY_RD )  ;
    end
    
    initial
    begin                                   //  clk
        clk = `TURE ;
        forever #5  clk = ~clk  ;
    end
    
    initial                                 //rst
    begin
        rst_n =   1'b0    ;
        repeat(5)   @( posedge clk )    ;
        rst_n =   1'b1    ;      
    end
    
    initial
    begin
        CAR_ON_CNTRY_RD =   1'b0    ;
        
        repeat  (20)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b1    ;
        repeat  (10)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b0    ;
        repeat  (20)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b1    ;
        repeat  (10)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b0    ;
        repeat  (20)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b1    ;
        repeat  (10)    @( posedge clk )    ;
            CAR_ON_CNTRY_RD =   1'b0    ;
            
        repeat ( 10 )   @( posedge clk )    ;
            $stop   ;                        
    end
    
endmodule

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

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

相关文章

linux安装java8 sdk,使用 tar.gz安装包手动安装

1. 下载 Java 8 SDK 首先&#xff0c;需要从 Oracle 的官方网站或 OpenJDK 的网站下载 Java 8 的 .tar.gz 文件。并上传到服务器 2. 解压 JDK 下载完成后&#xff0c;使用 tar 命令解压文件。打开服务器终端&#xff0c;然后使用以下命令&#xff1a; tar -xvzf jdk-8uXXX-…

6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用

目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch&#xff0c; 简称 ES&#xff0c;它是个开源分布式搜索引擎&#xff0c;它的特点有&#xff1a;分布式&#xff0c;零配置&#xff0c;自动发现&#xff0c;索引自动分片&#xff0c;索引副本机制&#xff0c;res…

【python爬虫】酷狗音乐爬取练习

注意&#xff1a;本次爬取的音乐仅有1分钟试听&#xff0c;仅作学习爬虫的原理&#xff0c;完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌&#xff0c;在请求里发现一段mp3文件&#xff0c;复制网址&#xff0c;确实是我们需要的url。 复制音频的…

计算机视觉cv2入门之图像空域滤波(待补充)

空域滤波 空域滤波是指利用像素及像素领域组成的空间进行图像增强的方法。这里之所以用滤波这个词,是因为借助了频域里的概念。事实上空域滤波技术的效果与频域滤波技术的效果可以是等价的&#xff0c;而且有些原理和方法也常借助频域概念来解释。 原理和分类 空域滤波是在图…

游戏引擎学习第149天

今日回顾与计划 在今天的直播中&#xff0c;我们将继续进行游戏的开发工作&#xff0c;目标是完成资产文件&#xff08;pack file&#xff09;的测试版本。目前&#xff0c;游戏的资源&#xff08;如位图和声音文件&#xff09;是直接从磁盘加载的&#xff0c;而我们正在将其转…

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程&#xff08;通用&#xff09;&#xff01; 当我们成功接入大模型时&#xff0c;可以选中任意代码区域进行解答&#xff0c;共分为三个区域&#xff0c;分别是选中区域、提问区域以及回答区域&#xff0c;我…

升级到碳纤维齿轮是否值得?

引言&#xff1a;当齿轮开始“减肥” 在F1赛车的变速箱里&#xff0c;一个齿轮的重量减轻100克&#xff0c;就能让圈速提升0.1秒&#xff1b; 在无人机旋翼传动系统中&#xff0c;轻量化齿轮可延长续航时间15%&#xff1b; 甚至在高端机械腕表中&#xff0c;碳纤维齿轮的引入…

基于SpringBoot+Vue的瑜伽课体验课预约系统【附源码】

基于SpringBootVue的瑜伽课体验课预约系统 一、系统技术说明二、运行说明三、系统的演示四、系统的核心代码演示 一、系统技术说明 框架&#xff1a;SpringbootVue 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软…

文章被检测出是AI写的怎么办?

随着人工智能技术的飞速发展&#xff0c;AI辅助写作工具逐渐普及&#xff0c;为学生、科研人员以及创作者带来了诸多便利。然而&#xff0c;随之而来的是对学术诚信和内容原创性的担忧。当文章被检测出是AI写作时&#xff0c;应该如何应对&#xff1f;本文将探讨这一问题&#…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14基础固定表头示例

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【英伟达AI论文】多模态大型语言模型的高效长视频理解

摘要&#xff1a;近年来&#xff0c;基于视频的多模态大型语言模型&#xff08;Video-LLMs&#xff09;通过将视频处理为图像帧序列&#xff0c;显著提升了视频理解能力。然而&#xff0c;许多现有方法在视觉主干网络中独立处理各帧&#xff0c;缺乏显式的时序建模&#xff0c;…

[Lc10_hash] 总结 | 两数之和 | 字符重排 | 存在重复元素 i ii | 字母异位词分组

目录 1.介绍 2.两数之和 题解 3.面试题 01.02. 判定是否互为字符重排 题解 4.存在重复元素 题解 5.存在重复元素 II 题解 ⭕6.字母异位词分组 题解 1.介绍 哈希表是什么? 存储数据的容器前文&#xff1a;[C_] set | map | unordered_map 有什么用呢&#xff1f;…

缓存之美:Guava Cache 相比于 Caffeine 差在哪里?

大家好&#xff0c;我是 方圆。本文将结合 Guava Cache 的源码来分析它的实现原理&#xff0c;并阐述它相比于 Caffeine Cache 在性能上的劣势。为了让大家对 Guava Cache 理解起来更容易&#xff0c;我们还是在开篇介绍它的原理&#xff1a; Guava Cache 通过分段&#xff08;…

小组件适配屏幕主题色

iOS 18 新增Home screen Tint Color&#xff08;色调&#xff09;选择&#xff0c;用户可以通过以下方式自定义主屏幕颜色&#xff0c;并且小组件&#xff0c;APP 图标也会跟随改颜色。 比如说意料之外的小组件&#xff08;不兼容&#xff09; 白色部分内部应该还有其他显示内…

IO学习---->线程

1.创建两个线程&#xff0c;分支线程1拷贝文件的前一部分&#xff0c;分支线程2拷贝文件的后一部分 #include <head.h> sem_t sem; long half_size 0; // 全局变量&#xff0c;供所有线程共享void* product(void *arg) {FILE *src fopen("IO.text", "…

个人记录,Unity资源解压和管理插件

就是经典的两个AssetStudio 和 Ripper 没有什么干货&#xff0c;就是记录一下&#xff0c;内容没有很详细 AssetStudio 说错了&#xff0c;AssetStudio比较出名&#xff08;曾经&#xff09;&#xff0c;但好像堕落了 这个工具有个好处就是分类选择&#xff0c;&#xff08;…

day19-前端Web——Vue3+TS+ElementPlus

目录 1. Vue工程化1.1 介绍1.2 环境准备1.2.1 NodeJS安装双击安装包选择安装目录验证NodeJS环境变量配置npm的全局安装路径 1.3 Vue项目-创建1.4 Vue项目开发流程1.5 API风格1.6 案例 2. TS2.1 概述2.2 快速入门2.3 常用类型2.3.1 基础类型2.3.2 联合类型2.3.3 函数类型2.3.4 对…

隐私保护在 Facebook 用户身份验证中的应用

在这个数字化的时代&#xff0c;个人隐私保护成为了公众关注的焦点。社交媒体巨头 Facebook 作为全球最大的社交平台之一&#xff0c;拥有数十亿用户&#xff0c;其在用户身份验证过程中对隐私保护的重视程度直接影响着用户的安全感和信任度。本文将探讨 Facebook 在用户身份验…

【JavaWeb学习Day23】

Maven高级 分模块设计与开发 分模块设计&#xff1a;将一个大项目分成若干个子模块&#xff0c;方便项目的维护、扩展&#xff0c;也方便模块间的相互引用&#xff0c;资源共享。 策略&#xff1a; 1.策略一&#xff1a;按照功能模块拆分&#xff0c;比如&#xff1a;公共组…

个人记录的一个插件,Unity-RuntimeMonitor

没有什么干货,仅仅是个人的记录 基于GUI做的一个工具:好处就是Monitor必须,Unity天然支持实时的Monitor;唯一不好处,就是默认字体太小了,layout居中,居右也是要自行设计的。 (下面文字是有一点点写错,但意思和功能就很牛逼了;并不是都按2 x shift,而是一个 shift 添…