军用FPGA软件 Verilog语言的编码准测之复位

军用FPGA软件 Verilog语言的编码准测之复位

语言 :Verilg HDL
EDA工具:ISE、Vivado、Quartus II

      • 军用FPGA软件 Verilog语言的编码准测之复位
        • 一、引言
        • 二、基本编程规范之复位
          • 强制准则1----禁止将异步的置位/复位信号连接到非置位/复位端
          • 强制准则2----禁止在同一条复位线路中同时使用异步复位和同步复位
          • 强制准则3----禁止使用有竞争冒险情况的组合逻辑输出作为复位信号
          • 强制准则4----在资源未受限制时,必须使用专用时钟单元驱动内部产生时钟、高扇出控制信号或内部产生复位信号
          • 强制准则5----非SRAM 型 FPGA, 必须对寄存器进行上电初始化,赋固定值
          • 建议准则6----建议为复位产生电路创建独立的模块
          • 建议准则7----避免在异步复位线路中插入逻辑操作运算
          • 建议准则8----避免使用内部生成信号作为寄存器的异步复位信号
          • 建议准则9----避免同时使用异步置位和异步复位信号
          • 建议准则10----建议在同一个 akways 语句中只使用同一个复位信号
        • 三、 总结

  • 关键词: 安全子集,Verilog HDL,编码准则 , 复位
一、引言

本文学习军用可编程逻辑器件软件 Verilog 语言编程安全子集,标准准则分为强制准则和建议准则,强制准则在Verilog编程中应该遵循,建议准则在Verilog编程中可参考执行。

二、基本编程规范之复位
强制准则1----禁止将异步的置位/复位信号连接到非置位/复位端
强制准则2----禁止在同一条复位线路中同时使用异步复位和同步复位

违背示例:

module test( clk_40m,rst_n,in1,in2,out1, out2)input clk_40m;
input in1 ; 
input in2 ; 
input rst_n ; 
output reg out1 ; 
output reg out2 ; 
reg temp1;always@(posedge clk_40m or negedge rst_n)  if(!rst_n)out1<= 1'b0; else out1 <= in1 ; always@(posedge clk_40m)  if(!rst_n)out2<=  0; else out2 <=  in2 ;  //违背1
...
endmodule

遵循示例:

module test( clk_40m,rst_n,in1,in2,out1, out2)input clk_40m;
input in1 ; 
input in2 ; 
input rst_n ; 
output reg out1 ; 
output reg out2 ; 
reg temp1;always@(posedge clk_40m or negedge rst_n)  if(!rst_n)out1<= 1'b0; else out1 <= in1 ; always@(posedge clk_40m or negedge rst_n)  if(!rst_n)out2<=  0; else out2 <=  in2 ;  //遵循
...
endmodule
强制准则3----禁止使用有竞争冒险情况的组合逻辑输出作为复位信号

违背示例:

module test(   rsta_n,rsth_n,clk_40m, din ,qout )
input rsta_n;
input rsth_n;
input clk_40m;
input din ; 
output reg  qout  ; wire rst_n;assign rst_n= rsta_n & rsth_n;always@(posedge clk_40m or negedge rst_n)  if(!rst_n)qout  <= 1'b0; else qout  <= din ; 
endmodule
强制准则4----在资源未受限制时,必须使用专用时钟单元驱动内部产生时钟、高扇出控制信号或内部产生复位信号
强制准则5----非SRAM 型 FPGA, 必须对寄存器进行上电初始化,赋固定值
建议准则6----建议为复位产生电路创建独立的模块
建议准则7----避免在异步复位线路中插入逻辑操作运算

违背示例:

module test(   rst_n,clk_40m, data,sel,qout)
input rst_n;
input sel;
input clk_40m;
input data; 
output  qout  ; wire rst_n_in;assign rst_n_in= rst_n & sel;     //违背always@(posedge clk_40m or negedge rst_n_in)  if(!rst_n_in)qout  <= 1'b0; else qout  <= data; 
endmodule
建议准则8----避免使用内部生成信号作为寄存器的异步复位信号

违背示例:

module test(   rst_n,clk_40m,in1, data,qout)
input rst_n;
input in1 ; 
input clk_40m;
input data; 
output reg qout  ; reg regc;always@(posedge clk_40m or negedge rst_n )  if(!rst_n )regc <= 1'b0; else regc<= in1 ; always@(posedge clk_40m or negedge regc)  if(!regc)qout<= 1'b0; else qout<= data; endmodule
建议准则9----避免同时使用异步置位和异步复位信号

违背示例:

module test(   rst_n,clk_40m, get,data,sel,qout)
input rst_n;
input sel;
input clk_40m;
input data; 
output reg  qout  ; always@(posedge clk_40m or negedge rst_n or posedge set )  //违背if(!rst_n )qout<= 1'b0; else if( set ) qout<= 1'b1;   else  qout  <= data; 
endmodule

遵循示例:

module test(   rst_n,clk_40m, get,data,sel,qout)
input rst_n;
input sel;
input clk_40m;
input data; 
output reg  qout  ; always@(posedge clk_40m or negedge rst_n )  //违背if(!rst_n )qout<= 1'b0; else if( set ) qout<= 1'b1;   else  qout  <= data; endmodule
建议准则10----建议在同一个 akways 语句中只使用同一个复位信号
三、 总结

文章讨论了军用FPGA软件在使用Verilog语言编程时的编码规范,特别关注复位信号的处理。文章列出了一系列关于复位信号处理的强制和建议准则:

强制准则1:禁止将异步的置位/复位信号连接到非置位/复位端。
强制准则2:禁止在同一条复位线路中同时使用异步复位和同步复位。
强制准则3:禁止使用有竞争冒险情况的组合逻辑输出作为复位信号。
强制准则4:在资源未受限制时,必须使用专用时钟单元驱动内部产生时钟、高扇出控制信号或内部产生复位信号。
强制准则5:非SRAM型FPGA必须对寄存器进行上电初始化,赋予固定值。
建议准则6:建议为复位产生电路创建独立的模块。
建议准则7:避免在异步复位线路中插入逻辑操作运算。
建议准则8:避免使用内部生成信号作为寄存器的异步复位信号。
建议准则9:避免同时使用异步置位和异步复位信号。
建议准则10:建议在同一个always语句中只使用同一个复位信号。
通过示例代码展示了违背和遵循这些准则的情况。

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

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

相关文章

Json-server 的使用教程

目录 前言一、简介二、安装与配置1. 安装 node-js2. npm 镜像设置3. 安装 json-server 三、使用1. 创建本地数据源2. 启动 Json Server3. 操作数据&#xff08;1&#xff09;查询数据&#xff08;2&#xff09;新增数据&#xff08;3&#xff09;修改数据&#xff08;4&#xf…

RTOS笔记--资源管理

资源管理 资源管理&#xff0c;其实就是前面介绍过的通知方式中的队列信号量互斥量等是如何访问临界资源的&#xff0c;如何做到完全互斥。 在之前举过一个例子&#xff1a;当我们使用全局变量来进行互斥操作时&#xff0c;有可能在改写全局变量时被切换使得不再互斥&#xff0…

【SpringBoot】深入分析 SpringApplication 源码:彻底理解 SpringBoot 启动流程

在黄昏的余晖里&#xff0c;梦境渐浓&#xff0c;如烟如雾。心随星辰&#xff0c;徜徉远方&#xff0c;岁月静好&#xff0c;愿如此刻般绵长。 文章目录 前言一、SpringBoot 应用二、SpringApplication2.1 SpringApplication 中的属性2.2 SpringApplication 的构造器2.3 Sprin…

185. 部门工资前三高的所有员工

185. 部门工资前三高的所有员工 题目链接&#xff1a;185. 部门工资前三高的所有员工 代码如下&#xff1a; # Write your MySQL query statement below select d.Name as Department,e1.Name as Employee,e1.Salary from Employee as e1 join Department as d on e1.Depart…

【Linux】基础IO——文件描述符,重定向,FILE

话接上篇&#xff1a; 1.文件描述符fd 磁盘文件 VS 内存文件&#xff1f; 当文件存储在磁盘当中时&#xff0c;我们将其称之为磁盘文件&#xff0c;而当磁盘文件被加载到内存当中后&#xff0c;我们将加载到内存当中的文件称之为内存文件。磁盘文件和内存文件之间的关系就像程…

JVM 三色标记算法

三色标记算法核心原理 三色标记算法是一种JVM的垃圾标记算法&#xff0c;CMS/G1垃圾回收器就是使用的这种算法&#xff0c;它可以让JVM在不发生或者尽可能短的发生STW&#xff08;Stop The World&#xff09;的情况下进行垃圾的标记和清除。 顾名思义&#xff0c;三色标记算法…

【名词解释】Unity中的3D物理系统:刚体

Unity中的3D物理系统是用于模拟现实世界中物体的运动和相互作用的一套工具和组件。刚体&#xff08;Rigidbody&#xff09;是Unity 3D物理系统中的一个核心组件&#xff0c;它允许游戏对象&#xff08;GameObject&#xff09;受到重力和外力的影响&#xff0c;并参与碰撞检测。…

实现JWT认证与授权的Spring Boot项目详解

我们将详细介绍如何使用JWT&#xff08;JSON Web Tokens&#xff09;结合Spring Boot框架实现用户认证和授权系统。此方案将包括用户注册、登录以及通过JWT令牌进行后续请求的身份验证过程。我们将从引入必要的依赖开始&#xff0c;然后逐步构建项目的各个部分&#xff0c;包括…

精品丨PowerBI迁移到SSAS

业务场景&#xff1a; 企业初期在进行 BI 可视化路线的时候&#xff0c;往往不会选择方案较为完整的SSAS&#xff0c;而是会选择轻量的 PowerBI 方案&#xff0c;究其根本还是软件成本的问题。 但是随着模型越来越臃肿&#xff0c;维护成本越来越高&#xff0c;有很多模型需要进…

【名词解释】Unity中的3D坐标系

Unity中的3D坐标系是一个基于右手定则的笛卡尔坐标系&#xff0c;它定义了Unity场景中所有3D对象的位置、旋转和缩放。以下是一些基本的名词解释和使用方法&#xff1a; 名词解释&#xff1a; X轴&#xff1a;水平方向&#xff0c;从屏幕左侧向右延伸。Y轴&#xff1a;垂直方…

SQL Auto Increment

SQL Auto Increment 在关系型数据库中&#xff0c;自动增量&#xff08;Auto Increment&#xff09;是一个常见且实用的特性。它允许数据库自动为表中插入的新行分配唯一的标识符&#xff0c;通常用于主键字段。本文将深入探讨SQL中的自动增量功能&#xff0c;包括其工作原理、…

Java面向对象-抽象类和抽象方法

Java面向对象-抽象类和抽象方法 1、代码案例展示2、抽象类和抽象方法的关系&#xff1a; 1、代码案例展示 1、在一个类中会有一类方法&#xff0c;无需重写&#xff0c;直接使用 2、在一个类中会有一类方法&#xff0c;会对这个方法进行重写 3、一个方法的方法体去掉&#xff…

【文心智能体分享】日记周报助手

引言 在繁忙的实习生活中&#xff0c;你是否曾为如何整理日常的工作日志、周报、月报而烦恼&#xff1f;现在&#xff0c;我们为你带来了一个全新的智能体——“日记周报助手”&#xff0c;它将成为你实习过程中的得力助手&#xff0c;帮你轻松整理实习日志&#xff0c;让你的…

mysql 中的锁

一.锁的介绍 锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff0c;在数据库中&#xff0c;除了传统的计算资源&#xff08;cpu&#xff0c;ram&#xff0c;i/o&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性…

【C#】IndexOf的使用

1. 在ObservableCollection<T> 类中使用&#xff1a; ObservableCollection<T> 类是 C# 中的一个集合类&#xff0c;它继承自 Collection<T> 并实现了 INotifyCollectionChanged 接口&#xff0c;使得集合的更改可以自动通知给任何监听它的界面元素。这使得…

初见 Rollup 的十大常见问题

文章目录 初见 Rollup 的十大常见问题1. 超神奇的 Rollup 英文解释&#xff01;2. 为什么 ESM 要比 CommonJS 要好呢&#xff1f;3. 什么是 tree-shaking ?4. 如何使用 Rollup 处理 CommonJS&#xff1f;5. 为什么 node-resolve 不是一个内置功能&#xff1f;6. 为什么在进行代…

如何警用root用户登录ssh

使用tail指令&#xff0c;可以动态查看日志信息。 &#xff08;tail -f /var/log/secure或messages&#xff09; 使用>符号&#xff0c;可以清空日志内容&#xff0c;不删除文件本身。 禁用root用户为以下步骤&#xff1a; 首先使用useradd创建用户&#xff08;可以修改为其…

STM32HAL-最简单的时间片论法

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、总结 概述 本文章使用最简单的写法时间片论法框架,非常适合移植各类型单片机,特别是资源少的芯片上。接下来将在stm32单片机上实现,只需占用1个定时器作为tick即可。(按键框架+时间片论法)…

20240613每日前端--------聊聊根据面试简历面试的一位高级前端开发工程师

项目经验 封装了通用的表单组件&#xff0c;支持多表单结构&#xff0c;如&#xff1a;富文本编辑器、文件上传等封装了 Echarts 图表组件&#xff0c;可以展示各种报表数据封装了通用的表格组件&#xff0c;支持多条件搜索及分页功能封装了 svg 图标上传组件&#xff0c;将下…

【数据结构之B树的讲解】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…