欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 军用FPGA软件 Verilog语言的编码准测之时钟

军用FPGA软件 Verilog语言的编码准测之时钟

2026/6/3 7:42:22 来源:https://blog.csdn.net/qq_34895681/article/details/139665823  浏览:    关键词:军用FPGA软件 Verilog语言的编码准测之时钟

军用FPGA软件 Verilog语言的编码准测之时钟

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

      • 军用FPGA软件 Verilog语言的编码准测之时钟
        • 一、引言
        • 二、基本编程规范之时钟
          • 强制准则1----禁止将寄存器的输出直接连接到其他寄存器的时钟管脚。
          • 强制准则2----禁止将时钟信号连接在除寄存器时钟管脚之外的其他信号管脚。
          • 强制准则3----禁止将组合逻辑的输出作为时钟信号
          • 建议准则4----避免同时使用时钟的上升沿和下降沿
          • 建议准则5----建议建议为时钟产生电路创建独立的模块
          • 强制准则6----避免使用门控时钟
          • 建议准则7----建议仅使用一个时钟域
        • 三、总结

  • 关键词: 安全子集,Verilog HDL,编码准则 ,时钟
一、引言

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

二、基本编程规范之时钟
强制准则1----禁止将寄存器的输出直接连接到其他寄存器的时钟管脚。

禁止将寄存器的输出直接连接到其他寄存器的时钟管脚。注:如有此类情况,可采用时钟网络驱动等措施。

违背示例:

module test( clk_40m, in1 ,in2, out1)
input clk_40m;
input in1 ; 
input in2 ; 
output reg out1 ; reg temp1;always@(posedge clk_40m)  
temp1 <= in1 ; always@( posedge temp1)    //违背1
out1 <= in2 ; 
...
endmodule

遵循示例:

module test( clk_40m, in1 ,in2, out1)
input clk_40m;
input in1 ; 
input in2 ; 
output reg out1 ; reg temp1;
wire clk_temp ; 
always@(posedge clk_40m)  
temp1 <= in1 ; BUFG inclk_inst(.I(temp1),O(clk_temp))always@( posedge clk_temp)    //遵循1
out1 <= in2 ; 
...
endmodule

遵循示例:

强制准则2----禁止将时钟信号连接在除寄存器时钟管脚之外的其他信号管脚。

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

违背示例:

module test( clk_30m,rst_n,clk_40m, in1 ,out1, out2)
input clk_30m;
input clk_40m;
input in1 ; 
input rst_n ; 
output reg out1 ; 
output reg out2 ; 
reg temp1;always@(posedge clk_30m)  if(!rst_n)out1<= 0; else out1 <= in1 ; always@(posedge clk_40m)  if(!rst_n)out2<= 0; else out2 <= clk_30m; //违背1
...
endmodule
强制准则3----禁止将组合逻辑的输出作为时钟信号

违背示例:

module test(   ctrl,clk_40m, d1 ,d2,out1, out2)
input ctrl;
input clk_40m;
input d1; 
input d2; 
output   out1 ; 
output   out2 ; 
wire and_clk_40m;assign and_clk_40m = ctrl & d1;always@(posedge and_clk_40m)  //违背1...
endmodule

遵循示例:

module test(   ctrl,clk_40m, d1 ,d2,out1, out2)
input ctrl;
input clk_40m;
input d1; 
input d2; 
output   out1 ; 
output   out2 ; 
wire and_clk_40m;always@(posedge  clk_40m)  //违背1...
endmodule
建议准则4----避免同时使用时钟的上升沿和下降沿

违背示例:

module rst(clk_40m,rst_n , in,out); 
input clk_40m;
input rst_n;
input in; 
output reg  out ; reg temp ;always @(posedge  clk_40m)     //违背if(!rst_n)temp <= 1'b0 ; elsetemp <= in ; 	always @( negedge clk_40m)   //违背if(!rst_n)out<= 1'b0 ; elseout<= temp ; 	...endmodule
建议准则5----建议建议为时钟产生电路创建独立的模块
强制准则6----避免使用门控时钟

注:如果需要使用门控时钟,可采用在顶层创建独立的门控时钟生成电路等措施。
违背示例:

module buffer(   en,clk_40m, din, dout);
input en;
input clk_40m;
input din; output reg  dout; 
wire oe;assign oe = clk_40m & en ;always@(posedge  oe )  //违背1dout <= din ; 
...
endmodule
建议准则7----建议仅使用一个时钟域
三、总结

在军用FPGA软件设计中,Verilog语言的编码标准是非常重要的,特别是关于时钟信号的处理。时钟信号是数字电路设计中的核心,确保数据的同步和稳定
本文描述了几个Verilog程序编写时时钟的准则:
强制准则1:禁止将寄存器的输出直接连接到其他寄存器的时钟管脚。这是因为直接连接可能会导致时钟信号的不稳定或时钟冲突,从而影响电路的可靠性。

强制准则2:禁止将时钟信号连接在除寄存器时钟管脚之外的其他信号管脚。这有助于避免潜在的时钟域交叉问题,确保时钟信号仅用于同步寄存器。

强制准则3:禁止将组合逻辑的输出作为时钟信号。组合逻辑的输出可能会受到多种因素的影响,其稳定性和频率可能无法保证,因此不适合用作时钟信号。

建议准则4:避免同时使用时钟的上升沿和下降沿。这可以减少设计中的复杂性,降低时钟同步问题的风险。

强制准则5 :避免使用门控时钟。门控时钟可能会引入额外的时钟抖动和不确定性,影响电路的性能。

建议准则6 :建议为时钟产生电路创建独立的模块。这有助于管理和优化时钟信号,同时减少设计中的耦合。

建议准则6:建议仅使用一个时钟域。这有助于简化设计,避免复杂的时钟域交叉问题,提高电路的稳定性和可预测性。

在设计军用FPGA时,遵循这些准则是至关重要的,因为它们有助于确保系统的可靠性、稳定性和性能。在实际编码时,还应考虑其他因素,如时钟频率、时钟偏斜、时钟抖动等,以满足军用标准对性能和质量的严格要求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词