当前位置: 首页 > news >正文

军用FPGA软件 Verilog语言的编码准测之触发器、锁存器

军用FPGA软件 Verilog语言的编码准测之触发器、锁存器

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

      • 军用FPGA软件 Verilog语言的编码准测之触发器、锁存器
        • 一、引言
        • 二、基本编程规范之触发器
          • 强制准则1---禁止在同一个 always 语句中混合使用有复位和无复位的触发器。
          • 强制准则2---在复位或者初始化时,必须对触发器赋初值
          • 强制准则3----复位信号的触发条件与进入条件必须一致
        • 三、基本编程规范之锁存器
          • 强制准则1----禁止出现含有锁存器的组合逻辑环路
          • 强制准则2----禁止使用基本逻辑门来描述锁存器
          • 建议准则3----建议将锁存器与其他组合逻辑电路分开描述
        • 四、总结

  • 关键词: 安全子集,Verilog HDL,编码准则 ,触发器、锁存器
一、引言

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

二、基本编程规范之触发器
强制准则1—禁止在同一个 always 语句中混合使用有复位和无复位的触发器。

违背示例:

module top( clk_40m, rst_n, in1 ,in2, out1,out2)
input clk_40m;
input rst_n;
input in1 ; 
input in2 ; 
output reg out1 ; 
output reg out2 ; 
reg temp1;always@(posedge clk_40m or negedge rst_n)  beginif( !rst_n)out1 <= 1'b0 ; else beginout1 <= in1; out2 <= in2;   //违背endend
temp1 <= in1 ; 。。。
endmodule

遵循示例:

module top( clk_40m, rst_n, in1 ,in2, out1,out2)
input clk_40m;
input rst_n;
input in1 ; 
input in2 ; 
output reg out1 ; 
output reg out2 ; 
reg temp1;always@(posedge clk_40m or negedge rst_n)  beginif( !rst_n) beginout1 <= 1'b0 ;       //遵循out2 <= 1'b0 ;      endelse beginout1 <= in1; out2 <= in2;   endend
temp1 <= in1 ; 。。。
endmodule

遵循示例:

强制准则2—在复位或者初始化时,必须对触发器赋初值

注:如不能连接到数据端口或者复位端口等。

违背示例:

module top(  clk_40m,  out1 )
input clk_40m;
output out2 ; 
reg[3:0] counter;always@(posedge clk_40m)  counter <=counter +1'b1 ; //违背...
endmodule

遵循示例:

module top(  clk_40m, rst_n, x)
input clk_40m;
input rst_n ; 
output[3:0] out2 ; 
reg[3:0] counter;always@(posedge clk_40m)  
beginif( !rst_n)counter  <= 4'b0; elsecounter <=counter +1'b1 ; //违背endassign out2  =counter  ; 
...
endmodule
强制准则3----复位信号的触发条件与进入条件必须一致

违背示例:

always@(posedge clk_40m or negedge rst_n)  
beginif(  rst_n)      //违背qout <= 1'b0; elseqout <=data; end

遵循示例:

always@(posedge clk_40m or negedge rst_n)  
beginif(  !rst_n)      //违背qout <= 1'b0; elseqout <=data; end
三、基本编程规范之锁存器
强制准则1----禁止出现含有锁存器的组合逻辑环路

违背示例:

module top(in1,in2,en,ou1); 
input in1;
input in2;
input en; 
output reg  out1 ; wire temp ;
assign temp  = !(in1 & in2 & out1);
always @(en or temp)     //违背if(en)out1 = temp ; elseout1 = out1  ;endmodule
强制准则2----禁止使用基本逻辑门来描述锁存器

注:基本逻辑门包括与门、非门和或门等

建议准则3----建议将锁存器与其他组合逻辑电路分开描述

违背示例:

module top(data,start, en,dout1, dout2);
input data;
input start;
input en; 
output reg  dout1;  
output reg  dout2; always@(data,start, en )   beginif(  en ) dout1 = data ; else dout1 = dout1 ;  dout2 = data| start ; //违背
endendmodule

遵循示例:

module top(data,start, en,dout1, dout2);
input data;
input start;
input en; 
output reg  dout1;  
output reg  dout2; always@(data,  en )   beginif(  en ) dout1 = data ; else dout1 = dout1 ;  endalways@(data,  start )   begin  //遵循dout2 = data| start ; 
endendmodule
四、总结

文章详细介绍了军用FPGA软件编程中使用Verilog语言时应遵守的一系列编码规范,特别是针对触发器和锁存器的设计准则。文章中提出的强制准则包括:
触发器准则
强制准则1:禁止在同一个always语句中混合使用有复位和无复位的触发器。
强制准则2:在复位或初始化时,必须对触发器赋初值。
强制准则3:复位信号的触发条件与进入条件必须一致。
锁存器准则
强制准则1:禁止出现含有锁存器的组合逻辑环路。
强制准则2:禁止使用基本逻辑门来描述锁存器。

文章通过具体的代码示例展示了遵循和违反这些准则的不同情况,强调了遵守这些规范对于确保军用FPGA软件的稳定性和可靠性至关重要。

相关文章:

  • 各类存储器类型(RAM、ROM、FLASH、DRAM、SRAM)
  • Kafka之ISR机制的理解
  • Java程序设计语言的特点
  • 【Quartus 13.0】NIOS II 部署UART 和 PWM
  • phpStudy里面的MySQL启动不了
  • 这些已经死去的软件,依旧无可替代
  • 深度学习 - CNN
  • 基于Wireshark实现对FTP的抓包分析
  • 多目标跟踪中检测器和跟踪器如何协同工作的
  • JavaScript------const
  • kali系统几个开机启动项的区别
  • 【网络编程】多进程服务器端
  • mybatis使用注解形式实现一对多、多对多查询(转载)
  • Unity 6预览版即将增加对visionOS 2的支持
  • 【向量检索】之向量数据库Milvus,Faiss详解及应用案例
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Docker: 容器互访的三种方式
  • Fundebug计费标准解释:事件数是如何定义的?
  • HashMap剖析之内部结构
  • js对象的深浅拷贝
  • JS实现简单的MVC模式开发小游戏
  • Laravel5.4 Queues队列学习
  • leetcode98. Validate Binary Search Tree
  • Webpack 4x 之路 ( 四 )
  • windows下mongoDB的环境配置
  • 安卓应用性能调试和优化经验分享
  • 动态规划入门(以爬楼梯为例)
  • 翻译:Hystrix - How To Use
  • ​虚拟化系列介绍(十)
  • $.ajax()
  • (¥1011)-(一千零一拾一元整)输出
  • (20050108)又读《平凡的世界》
  • (9)目标检测_SSD的原理
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (十三)Flink SQL
  • (一)UDP基本编程步骤
  • (转)创业家杂志:UCWEB天使第一步
  • (转)为C# Windows服务添加安装程序
  • (转)详解PHP处理密码的几种方式
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • ****三次握手和四次挥手
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET CORE Aws S3 使用
  • .Net Memory Profiler的使用举例
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 分布式技术比较
  • .Net实现SCrypt Hash加密