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

2024-06-14 08:04

本文主要是介绍军用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语言的编码准测之时钟的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1059835

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

Python动态处理文件编码的完整指南

《Python动态处理文件编码的完整指南》在Python文件处理的高级应用中,我们经常会遇到需要动态处理文件编码的场景,本文将深入探讨Python中动态处理文件编码的技术,有需要的小伙伴可以了解下... 目录引言一、理解python的文件编码体系1.1 Python的IO层次结构1.2 编码问题的常见场景二

python语言中的常用容器(集合)示例详解

《python语言中的常用容器(集合)示例详解》Python集合是一种无序且不重复的数据容器,它可以存储任意类型的对象,包括数字、字符串、元组等,下面:本文主要介绍python语言中常用容器(集合... 目录1.核心内置容器1. 列表2. 元组3. 集合4. 冻结集合5. 字典2.collections模块

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

Java中字符编码问题的解决方法详解

《Java中字符编码问题的解决方法详解》在日常Java开发中,字符编码问题是一个非常常见却又特别容易踩坑的地方,这篇文章就带你一步一步看清楚字符编码的来龙去脉,并结合可运行的代码,看看如何在Java项... 目录前言背景:为什么会出现编码问题常见场景分析控制台输出乱码文件读写乱码数据库存取乱码解决方案统一使

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作