本文主要是介绍军用FPGA软件 Verilog语言的编码准测之时钟,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
军用FPGA软件 Verilog语言的编码准测之时钟
语言 :Verilg HDL
EDA工具:ISE、Vivado、Quartus II
- 军用FPGA软件 Verilog语言的编码准测之时钟
- 一、引言
- 二、基本编程规范之时钟
- 强制准则1----禁止将寄存器的输出直接连接到其他寄存器的时钟管脚。
- 强制准则2----禁止将时钟信号连接在除寄存器时钟管脚之外的其他信号管脚。
- 强制准则3----禁止将组合逻辑的输出作为时钟信号
- 建议准则4----避免同时使用时钟的上升沿和下降沿
- 建议准则5----建议建议为时钟产生电路创建独立的模块
- 强制准则5----避免使用门控时钟
- 强制准则6----建议仅使用一个时钟域
- 关键词: 安全子集,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----建议建议为时钟产生电路创建独立的模块
强制准则5----避免使用门控时钟
注:如果需要使用门控时钟,可采用在顶层创建独立的门控时钟生成电路等措施。
违背示例:
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
强制准则6----建议仅使用一个时钟域
这篇关于军用FPGA软件 Verilog语言的编码准测之时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!