码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 军用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)  begin
        if( !rst_n)
            out1 <= 1'b0 ; 
         else begin
            out1 <= in1; 
            out2 <= in2;   //违背
        end
     
    end
    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)  begin
        if( !rst_n) begin
            out1 <= 1'b0 ;       //遵循
            out2 <= 1'b0 ;      
         end
         else begin
            out1 <= in1; 
            out2 <= in2;   
        end
     
    end
    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)  
    begin
         if( !rst_n)
           counter  <= 4'b0; 
    	else
    	 counter <=counter +1'b1 ; //违背
     end
    
    assign out2  =counter  ; 
    ...
    endmodule
    
    
    强制准则3----复位信号的触发条件与进入条件必须一致

    违背示例:

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

    遵循示例:

    always@(posedge clk_40m or negedge rst_n)  
    begin
         if(  !rst_n)      //违背
           qout <= 1'b0; 
    	else
    	 qout <=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 ; 
       else
            out1 = 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 )   begin
    	if(  en ) 
    	   dout1 = data ; 
    	 else 
    	   dout1 = dout1 ;  
    
       dout2 = data| start ; //违背
    end
     
    endmodule
    

    遵循示例:

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

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

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

  • 相关阅读:
    SpringCloud - Spring Cloud Netflix 之 Hystrix ;turbine(十)
    css 超出滑动使用 CSS 实现超出滑动
    网络超时检测-11.9
    高质量代码计算降水季节指数Seasonality index
    【每日一题】倍数求和
    在微信公众号上怎么搭建付费课程功能
    数据库中的范式
    【人工智能与机器学习】——线性回归、逻辑回归与分类评价指标(学习笔记)
    kubernetes Service详解
    二叉树的创建和遍历
  • 原文地址:https://blog.csdn.net/qq_34895681/article/details/139777201
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号