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

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

语言 :Verilg HDL

EDA工具:ISE、Vivado、Quartus II

一、引言

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

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

违背示例:

bash 复制代码
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

遵循示例:

bash 复制代码
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---在复位或者初始化时,必须对触发器赋初值

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

违背示例:

bash 复制代码
module top(  clk_40m,  out1 )
input clk_40m;
output out2 ; 
reg[3:0] counter;

always@(posedge clk_40m)  
	 counter <=counter +1'b1 ; //违背
 
...
endmodule

遵循示例:

bash 复制代码
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----复位信号的触发条件与进入条件必须一致

违背示例:

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

遵循示例:

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

违背示例:

bash 复制代码
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----建议将锁存器与其他组合逻辑电路分开描述

违背示例:

bash 复制代码
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

遵循示例:

bash 复制代码
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软件的稳定性和可靠性至关重要。

相关推荐
q27551300422 小时前
PL27A1对拷线搭配 PTCB818A 设计资料 高速跨系统互传+键鼠共享一缆搞定
经验分享·单片机·嵌入式硬件·硬件架构·信号处理
联蔚盘云2 小时前
解读|《人工智能安全治理框架》1.0
经验分享
_Minato_3 小时前
数据库知识整理——数据库控制功能
数据库·经验分享·笔记·软考·计算机系统
Metaphor6924 小时前
Java 读取或删除 Excel 文件文档属性:Spire.XLS for Java 实用指南
经验分享
阿星AI工作室5 小时前
3个方法把gemini3做的应用部署成网站!
经验分享
金海境科技5 小时前
【服务器数据恢复】误操作删除HP ProLiant DL380配置导致教育机构数据丢失数据恢复案例 - 金海境科技
经验分享
北岛寒沫5 小时前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第六课 生产可能性曲线、机会成本与交易)
经验分享·笔记
北岛寒沫5 小时前
北京大学国家发展研究院 经济学辅修 经济学原理课程笔记(第五课 福利经济学)
经验分享·笔记
hexiaoyan8275 小时前
信号处理卡 数据收发卡设计方案:428-基于XC7Z100+ADRV9009的双收双发无线电射频板卡 5G小基站 无线图传
fpga开发·无线图传·9009开发板·xc7z100板卡·视频数据收发卡
范纹杉想快点毕业5 小时前
AI助教初学者问答FPGA芯片基础概念100道问题,适用入门嵌入式软件初级工程师,筑牢基础,技术积累
fpga开发·架构