军用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语句中只使用同一个复位信号。
通过示例代码展示了违背和遵循这些准则的情况。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾引先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值