本文主要是介绍军用FPGA软件 Verilog语言的编码准测之复位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
军用FPGA软件 Verilog语言的编码准测之复位
语言 :Verilg HDL
EDA工具:ISE、Vivado、Quartus II
- 军用FPGA软件 Verilog语言的编码准测之复位
- 一、引言
- 二、基本编程规范之复位
- 强制准则1----禁止将异步的置位/复位信号连接到非置位/复位端
- 强制准则2----禁止在同一条复位线路中同时使用异步复位和同步复位
- 强制准则3----禁止使用有竞争冒险情况的组合逻辑输出作为复位信号
- 强制准则4----在资源未受限制时,必须使用专用时钟单元驱动内部产生时钟、高扇出控制信号或内部产生复位信号
- 强制准则5----非SRAM 型 FPGA, 必须对寄存器进行上电初始化,赋固定值
- 建议准则6----建议为复位产生电路创建独立的模块
- 建议准则7----避免在异步复位线路中插入逻辑操作运算
- 建议准则8----避免使用内部生成信号作为寄存器的异步复位信号
- 建议准则9----避免同时使用异步置位和异步复位信号
- 建议准则10----建议在同一个 akways 语句中只使用同一个复位信号
- 三、 总结
- 关键词: 安全子集,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语句中只使用同一个复位信号。
通过示例代码展示了违背和遵循这些准则的情况。
这篇关于军用FPGA软件 Verilog语言的编码准测之复位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!