军用FPGA软件 Verilog语言的编码准测之复位

2024-06-14 21:20

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



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

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

免费也能高质量!2024年免费录屏软件深度对比评测

我公司因为客户覆盖面广的原因经常会开远程会议,有时候说的内容比较广需要引用多份的数据,我记录起来有一定难度,所以一般都用录屏工具来记录会议内容。这次我们来一起探索有什么免费录屏工具可以提高我们的工作效率吧。 1.福晰录屏大师 链接直达:https://www.foxitsoftware.cn/REC/  录屏软件录屏功能就是本职,这款录屏工具在录屏模式上提供了多种选项,可以选择屏幕录制、窗口

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

C语言:柔性数组

数组定义 柔性数组 err int arr[0] = {0}; // ERROR 柔性数组 // 常见struct Test{int len;char arr[1024];} // 柔性数组struct Test{int len;char arr[0];}struct Test *t;t = malloc(sizeof(Test) + 11);strcpy(t->arr,