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

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

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

  • 关键词: 安全子集,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语句中只使用同一个复位信号。
通过示例代码展示了违背和遵循这些准则的情况。

相关推荐

  1. 军用FPGA软件 Verilog语言编码复位

    2024-06-14 18:34:03       28 阅读
  2. 军用FPGA软件 Verilog语言编码时钟

    2024-06-14 18:34:03       31 阅读
  3. FPGA | Verilog基础语法

    2024-06-14 18:34:03       68 阅读
  4. FPGA ——Verilog语法示例

    2024-06-14 18:34:03       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-14 18:34:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-14 18:34:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-14 18:34:03       82 阅读
  4. Python语言-面向对象

    2024-06-14 18:34:03       91 阅读

热门阅读

  1. Android找不到so,实际上apk中有的

    2024-06-14 18:34:03       26 阅读
  2. windows设备/路由设备上ip地址如何查看、使用

    2024-06-14 18:34:03       32 阅读
  3. 常见的spark mllib分类算法详解

    2024-06-14 18:34:03       32 阅读
  4. 实时通信websocket和sse

    2024-06-14 18:34:03       24 阅读
  5. 在vue和uniapp中使用 websocket并封装js

    2024-06-14 18:34:03       33 阅读
  6. Linux 常用命令合集

    2024-06-14 18:34:03       26 阅读