Verilog语法——4.Verilog工程模板、相应规范再强调

参考资料
【明德扬_verilog零基础入门语法HDL仿真快速掌握-手把手教你写FPGA/ASIC代码设计流程中的应用】

4. Verilog工程模板、相应规范

4.1 Verilog工程模板

4.1.1 设计模块模板

module module_name(
	clk,
	rst_n,
	//其他信号,举例dout
	dout
};
	//参数定义
	parameter DATA_W = 8;
	
	//输入信号定义
	input clk;
	input rst_n;
	
	//输出信号定义
	output[DATA_W-1:0] dout;
	
	//输出信号reg定义
	reg[DATA_W-1:0] dout;
	
	//中间信号定义
	reg signal_1;
	wire siginal_2;
	
	//组合逻辑写法
	always@(*)begin
		//组合逻辑事务
	end
	//时序逻辑写法
	always@(posedge clk or negedge rst_n)begin
		if(rst_n==1'b0)begin
			//复位操作
		end
		else begin
			//触发器操作
		end
	end
endmodule

4.1.2 测试模块模板

`timescale 1ns / 1ps
module TestBench_name();
    //时钟和复位
    reg clk     ;
    reg rst_n   ;
    
    //uut 的输入信号
    reg[3:0]    din_0   ;
    reg         din_1   ;
    
    //uut 的输出信号
    wire        dout_0  ;
    wire[4:0]   dout_1  ;
    
    //时钟周期,单位为ns,可在此修改时钟周期
    parameter CYCLE = 20;
    //复位时间,此时表示复位3个时钟周期的时间
    parameter RST_TIME = 3;
    
    //待测试的模块例化
    module_name uut(
        .clk       (clk)     ,
        .rst_n     (rst_n)   ,
        .din_0     (din_0)   ,
        .din_1     (din_1)   ,
        .dout_0    (dout_0)  ,
        .dout_1    (dout_1)  
        // ,更多...
    );
    
    //生成本地时钟:50M
    initial begin
        clk = 0;
        forever 
        #(CYCLE/2)
        clk = ~clk;
    end
    
    //产生复位信号
    initial begin
        rst_n = 1;
        #2;
        rst_n = 0;
        #(CYCLE*RST_TIME);
        rst_n = 1;
    end
    
    //输入信号din0赋值方式
    initial begin 
        #1;
        //赋初值
        din_0 = 0;
        #(10*CYCLE);
        //开始赋值
        
    end

    //输入信号din1赋值方式
    initial begin 
        #1;
        //赋初值
        din_1 = 0;
        #(10*CYCLE);
        //开始赋值
        
    end 
endmodule

4.2 相应规范

4.2.1 时序逻辑和组合逻辑写法

在这里插入图片描述

4.2.2 阻塞赋值和非阻塞赋值

在这里插入图片描述

4.2.3 always写法规范

在这里插入图片描述

4.2.4 begin end以及信号的对齐

在这里插入图片描述

4.2.5 信号大小写的规范

在这里插入图片描述

4.2.6 时钟及复位信号问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.7 reg和wire类型的使用

在这里插入图片描述

  • always里面,等号左边的信号,无论是时序逻辑还是组合逻辑,都必须是reg类型

4.2.8 输入输出的规范

在这里插入图片描述

  • 输出使用寄存器打一拍出去,可以极大降低出现亚稳态的概率。(毛刺)

在这里插入图片描述

4.2.9 总结

在这里插入图片描述
😊

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

渗透测试-靶机DC-2-知识点总结

靶机DC-2-知识点总结 一、前言二、实验环境三、渗透测试工具1. cewl&#xff08;1&#xff09;cewl简介&#xff08;2&#xff09;cewl常见用法 2. wpscan&#xff08;1&#xff09;wpscan简介&#xff08;2&#xff09;wpscan常见用法<1>直接扫描<2>-e u爆破用户名…

RabbitMQ交换机(3)-Topic

1.Topic模式 RabbitMQ的Topic模式是一种基于主题的消息传递模式。它允许发送者向一个特定的主题&#xff08;topic&#xff09;发布消息&#xff0c;同时&#xff0c;订阅者也可以针对自己感兴趣的主题进行订阅。 在Topic模式中&#xff0c; 主题通过一个由单词和点号组成的字…

如何在苹果手机上进行文件管理

摘要 苹果手机没有像安卓系统那样内置文件管理器&#xff0c;但是可以通过使用克魔开发助手来实现强大的文件管理功能。本文介绍了如何使用克魔开发助手在电脑上管理和传输苹果手机的文件。 引言 很多朋友都在使用苹果手机&#xff0c;但是当需要查看手机中的文件时&#xf…

STM32开发板,Win10、Win11 上的驱动安装说明

一、USB线插到 CMSIS-DAP 接口上&#xff0c;将自动识别到两个设备 ① CMSIS-DAP&#xff1a;用于烧录代码、在线硬件仿真; 在Keil里烧录&#xff0c;无需通过FlyMCU; ② USB转TTL&#xff1a;用于开发板与电脑间串口通信 &#xff0c;即USART1, TX-PA9、RX-PA10; 接口备注&a…

如何实现无公网ip远程访问内网本地BUG管理服务【内网穿透】

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二(正式赛)

2023年山东省职业院校技能大赛高职组信息安全管理与评估 模块二 模块二竞赛项目试题 根据信息安全管理与评估技术文件要求&#xff0c;模块二为网络安全事件响应、数字取证调查和 应用程序安全。本文件为信息安全管理与评估项目竞赛-模块二试题。 介绍 竞赛有固定的开始和结…

使用 Categraf 采集 Nginx 指标

1. 前言 工作中需要监控 Nginx 的指标&#xff0c;选用的指标采集器是 Categraf&#xff0c;特此记录下&#xff0c;以备后用。 此文档并未详细记录详细的操作细节&#xff0c;只记录了大概的操作步骤&#xff0c;仅供参考。 2. 采集基础指标 2.1. 暴露 Nginx 自带的指标采…

【数据结构】哈希表详解,举例说明 java中的 HashMap、HashTable及其区别

一、哈希表&#xff08;Hash Table&#xff09;简介&#xff1a; 哈希表是一种数据结构&#xff0c;用于实现字典或映射等抽象数据类型。它通过把关键字映射到表中的一个位置来实现快速的数据检索。哈希表的基本思想是利用哈希函数将关键字映射到数组的索引位置上&#xff0c;…

EDA-数据探索-pandas自带可视化-iris

# 加载yellowbrick数据集 import os import pandas as pd FIXTURES os.path.join(os.getcwd(), "data") df pd.read_csv(os.path.join(FIXTURES,"iris.csv")) df.head()sepal_lengthsepal_widthpetal_lengthpetal_widthspecies05.13.51.40.2setosa14.93…

二.几何基础_直线

O以下皆为公理推导的定理,有公理组成的新的定义 一.角 1.由线所组成的新的定义 角: 一点出发由两个不同方向的射线组成的图像(注:构成角的边是无界线的) 顶点: 两射线交汇处,如图 可称顶点为 ∠ A 或 ∠ C A B , ∠ B A C ∠A或∠CAB,∠BAC ∠A或∠CAB,∠BAC边: 构成角的射…

Spring WebSocket实现实时通信的详细教程

简介 WebSocket 是基于TCP/IP协议&#xff0c;独立于HTTP协议的通信协议。WebSocket 连接允许客户端和服务器之间的全双工通信&#xff0c;以便任何一方都可以通过已建立的连接将数据推送到另一方。 我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的&#x…

电力市场知识及市场出清电价(market clearing price)程序分享!

​Main-导览 一、电力市场概述 2000以前&#xff0c;国内并不存在电力市场&#xff0c;而是叫计划电力经济。发电侧为卖方&#xff0c;核算发电成本和利润上报国家&#xff0c;审核通过后就是上网电价。用户侧为买方&#xff0c;被动执行国家制定的分时电价。计划电力经济的优…

奇异值分解(SVD)【详细推导证明】

机器学习笔记 机器学习系列笔记&#xff0c;主要参考李航的《机器学习方法》&#xff0c;见参考资料。 第一章 机器学习简介 第二章 感知机 第三章 支持向量机 第四章 朴素贝叶斯分类器 第五章 Logistic回归 第六章 线性回归和岭回归 第七章 多层感知机与反向传播【Python实例…

使用opencv把视频转换为灰色并且逐帧率转换为图片

功能介绍 使用opencv库把视频转换为灰色&#xff0c;并且逐帧率保存为图片到本地 启动结果 整体代码 import cv2 import osvc cv2.VideoCapture(test.mp4)if vc.isOpened():open, frame vc.read() else:open Falseos.makedirs("grayAll", exist_okTrue) i 0 wh…

【Docker】Linux中使用Docker安装Nginx部署前后端分离项目应用

目录 一、概述 1. Nginx介绍 2. Nginx优势 3. Nginx的工作原理 二、容器创建 1. Mysql容器 2. Tomcat容器 3. Nginx容器 每篇一获 一、概述 1. Nginx介绍 Nginx&#xff08;发音为 "engine x"&#xff09;是一个开源的、高性能的 HTTP 服务器和反向代理服务…

项目开发中安全问题以及解决办法——客户请求需要校验

Slf4j RequestMapping("trustclientdata") Controller public class TrustClientDataController {//所有支持的国家private HashMap<Integer, Country> allCountries new HashMap<>();public TrustClientDataController() {allCountries.put(1, new Cou…

【音视频】基于NGINX如何播放rtmp视频流

背景 现阶段直播越来越流行&#xff0c;直播技术发展也越来越快。Webrtc、rtmp、rtsp是比较火热的技术&#xff0c;而且应用也比较广泛。本文通过实践来展开介绍关于rtmp如何播放。 概要 本文重点介绍基于NGINX如何播放rtmp视频流 正文 1、构造rtsp视频流 可以参考上一篇…

开发「定位线上问题」小工具总结

文章目录 1. 写在最前面1.1 背景1.2 思路 2. 如何快速解决问题2.1 分析问题2.2 补救问题2.2.1 思路2.2.2 实现 3. 碎碎念 1. 写在最前面 1.1 背景 同事给处理各种线上问题以及处理紧急要交付的需求版本的我&#xff0c;紧急插入了一个线上的问题&#xff1a; 问题说明&#…

甜蜜而简洁——深入了解Pytest插件pytest-sugar

在日常的软件开发中,测试是确保代码质量的关键步骤之一。然而,对于测试报告的生成和测试结果的可读性,一直以来都是开发者关注的焦点。Pytest插件 pytest-sugar 以其清晰而美观的输出,为我们提供了一种愉悦的测试体验。本文将深入介绍 pytest-sugar 插件的基本用法和实际案…

界面设计与品牌一致性

活动是电子商务行业最常见的运营手段之一&#xff0c;将借助各种节日不断推出促销活动&#xff1b;例如&#xff0c;从1月的元旦到12月的圣诞节&#xff0c;让用户关注节日的仪式&#xff0c;通过各种折扣促进用户订单&#xff0c;提高订单率。 让我们来思考一下活动页面是如何…
最新文章