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

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

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

4.1 Verilog工程模板

4.1.1 设计模块模板

module module_name(clk,rst_n,//其他信号,举例doutdout
};//参数定义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)beginif(rst_n==1'b0)begin//复位操作endelse begin//触发器操作endend
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)  // ,更多...);//生成本地时钟:50Minitial beginclk = 0;forever #(CYCLE/2)clk = ~clk;end//产生复位信号initial beginrst_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.hqwc.cn/news/412266.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测试开发】如何在团队中推广新工具,新技术?

前言 就测试开发工作而言,从阶段划分,可以粗略划分为四个阶段: 识别发现组织团队中的问题分析、制定解决方案实现解决方案赋能落地解决方案 今天我们重点来聊聊,最后一个阶段,赋能落地解决方案过程中的经验和思考。…

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

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

11.云原生分布式数据库之TIDB

云原生专栏大纲 文章目录 为什么使用TIDB后端视角运维视角基础架构视角 TiDB Operator 简介软件版本要求部署tidbTIDB工具helm常用命令TIDB学习推荐资料 为什么使用TIDB 从后端视角、运维视角和基础架构视角来看,使用 TiDB 作为数据库系统可以获得分布式架构、高可…

IDEA 2023.3.2 安装教程

1.下载2023.3.2版本IDEA 链接:https://pan.baidu.com/s/1RkXBLz6qxsd8VxXuvXCEMA?pwd5im6 提取码:5im6 2.安装 3.解压文件,进入,选择方式3 4.将下面文件夹复制到任意位置(不要有中文路径) 5.进入下面文…

快速入门java网络编程基础------Nio

一. NIO 基础 哔哩哔哩黑马程序员 netty实战视频 0.什么是nio? NIO(New I/O)是Java中提供的一种基于通道和缓冲区的I/O(Input/Output)模型。它是相对于传统的IO(InputStream和OutputStream)模型…

物联网孢子捕捉分析仪在农田起到什么作用

TH-BZ03随着科技的飞速发展,物联网技术在农业领域的应用越来越广泛。其中,物联网孢子捕捉分析仪作为一种先进的设备,在农田中发挥着不可或缺的作用。本文将详细介绍物联网孢子捕捉分析仪在农田中的作用。 一、实时监测与预警 物联网孢子捕捉分…

Sam Altman称人类水平的AI即将出现,通用人工智能(AGI)会带来什么改变?

OpenAI 首席执行官 Sam Altman 表示,达到人类水平的人工智能即将出现,但它对世界的影响远没有我们想象的那么大。 他在瑞士达沃斯世界经济论坛上的一次对话中表示:「它(AI)给世界带来的变化比我们想象的要小得多&…

C语言之通过指针操作字符串

下面我们来学习通过指针来灵活操作字符串的方法 判断字符串的长度 我们用对指针的遍历来实现判断字符串的长度 #include <stdio.h> int str_length(const char*s) {int len 0;while(*s)len;return len; } int main() {char str[128];printf("请输入字符&#xff…

低代码开发:解锁数字化转型新维度

在信息化浪潮中&#xff0c;企业正面临着前所未有的挑战与机遇。一方面&#xff0c;市场环境瞬息万变&#xff0c;业务需求迭代频繁&#xff0c;对快速应用开发提出了更高要求&#xff1b;另一方面&#xff0c;传统软件开发模式受限于高成本、长周期等瓶颈&#xff0c;难以满足…

【深度学习】Anaconda3 + PyCharm 的环境配置 3:GitHub 项目运行前的环境配置

前言 文章性质&#xff1a;实操记录 &#x1f4bb; 主要内容&#xff1a;主要记录了运行 GitHub 项目前的环境配置过程&#xff0c;包括创建并激活新的虚拟环境、安装 torch 和 torchvision&#xff0c;在 PyCharm 中使用新建的虚拟环境&#xff0c;根据项目源代码提供的 requi…

前端react入门day04-useEffect与Hook函数

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

文件操作解析(一)

前言 很多非计科的专业并未对文件操作这点做出详细解释&#xff0c;今天复习到这里就想趁此机会记录一下自己学到的知识&#xff0c;也希望能对大家有所帮助。 一.为什么使用文件 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的 内存中&#xff0c; 如果程序退出…