军用FPGA软件 Verilog语言的编码准测之三态缓冲器和运算符

军用FPGA软件 Verilog语言的编码准测之三态缓冲器和运算符

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

      • 军用FPGA软件 Verilog语言的编码准测之三态缓冲器和运算符
        • 一、引言
        • 二、基本编程规范之三态缓冲器
          • 强制准则1---禁止组合逻辑电路的输出作为三态缓冲器的使能端
          • 强制准则2---禁止使用内部三态
          • 强制准则3---避免将双向端口直接连接输入端口或输出端口
        • 三、基本编程规范之运算符
          • 强制准则1----关系操作符左边与右边的数据位宽必须一致
          • 强制准则2----位操作符左边与右边的数据位宽必须一致
          • 强制准则3----禁止在算术表达式中同时出现无符号数和有符号数
          • 强制准则4----禁止在关系表达式中使用包含“x”或者“z”的值
          • 强制准则5---禁止在算术操作时使用包含 “x” 或者“z ”的值
          • 强制准则6--在数值<位宽×进制×数字>表示中,数值位宽必须与数值的实际位宽一致
          • 强制准则7--禁止算术运算结果出现位宽溢出
          • 建议准则8--避免在向量运算中使用逻辑运算符
          • 建议准则9--建议为parameter 数据和常数指定进制('d,'b,'h,'c) 和位宽
        • 四、总结

  • 关键词: 安全子集,Verilog HDL,编码准则 ,三态缓冲器 、运算符
一、引言

本文学习军用可编程逻辑器件软件 Verilog 语言编程安全子集,标准准则分为强制准则和建议准则,强制准则在Verilog编程中应该遵循,建议准则在Verilog编程中可参考执行。本次分享 三态缓冲器和运算符的国军标verilog语言标准准则。

二、基本编程规范之三态缓冲器
强制准则1—禁止组合逻辑电路的输出作为三态缓冲器的使能端

违背示例:

module top( en1,en2,din,dout)
input en1;
input en2;
input din; output reg dout; always@(en1,en2,din)  beginif( en1 & en2)       //违背dout<= din ; else out1 <= 1'bz;  
endendmodule
强制准则2—禁止使用内部三态
强制准则3—避免将双向端口直接连接输入端口或输出端口

违背示例:

module top(  din,  dout,data )
input din;
inout data;
output dout; 
wire dout ; 
wire dataassign  data = din;   //违背...
endmodule
三、基本编程规范之运算符
强制准则1----关系操作符左边与右边的数据位宽必须一致

违背示例:

 wire[7:0] w_slot_a;wire[5:0] w_slot_b;wire[7:0] w_slot_c;wire[7:0] w_or ;
assign w_or = (w_slot_a <= w_slot_b) ? w_slot_a : w_slot_c ; //违背

遵循示例:

 wire[7:0] w_slot_a;wire[7:0] w_slot_b;wire[7:0] w_slot_c;wire[7:0] w_or ;
assign w_or = (w_slot_a <= w_slot_b) ? w_slot_a : w_slot_c ; //遵循
强制准则2----位操作符左边与右边的数据位宽必须一致

违背示例:

 wire[7:0] w_slot_a;wire[5:0] w_slot_b;wire[7:0] w_or ;
assign w_or = w_slot_a | w_slot_b; //违背

遵循示例:

 wire[7:0] w_slot_a;wire[7:0] w_slot_b;wire[7:0] w_or ;
assign w_or = w_slot_a | w_slot_b; //遵循
强制准则3----禁止在算术表达式中同时出现无符号数和有符号数

违背示例:

module add(din1,din2, dout1);
input signed[1:0]  din1;
input[1:0] din2;
output[2:0] dout; reg[2:0] dout; always@(din1 or din2  )   begindout  = {din1[1],din1} + {1'b0,din2}; //违背
endendmodule

遵循示例:

module add(din1,din2, dout1);
input [1:0]  din1;
input[1:0] din2;
output[2:0] dout; reg[2:0] dout; always@(din1 or din2  )   begindout  = {1'b0,din1} + {1'b0,din2}; //违背
endendmodule
强制准则4----禁止在关系表达式中使用包含“x”或者“z”的值

违背示例:

if( temp > 2'bzz)
强制准则5—禁止在算术操作时使用包含 “x” 或者“z ”的值

违背示例:

reg[1:0] data1 ; 
reg[1:0] data2 ; always@( posedge clk_40m) 
if( !rst_n)data2 <= data1 + 1'bx ; //违背
else data2 <= data1 ; 
强制准则6–在数值<位宽×进制×数字>表示中,数值位宽必须与数值的实际位宽一致

违背示例:

reg[3:0] temp; always@( posedge clk_40m) 
if( !rst_n)temp<= 2'd10 ; //违背

遵循示例:

reg[3:0] temp; always@( posedge clk_40m) 
if( !rst_n)temp<= 4'd10 ; //遵循
强制准则7–禁止算术运算结果出现位宽溢出

违背示例:

wire[7:0] temp; 
wire[7:0] temp1; 
wire[7:0] temp2; 
assign  temp = temp1 + temp2 ; //违背

遵循示例:

wire[8:0] temp; 
wire[7:0] temp1; 
wire[7:0] temp2; 
assign  temp = {1'b0,temp1}+ {1'b0,temp2}; 
建议准则8–避免在向量运算中使用逻辑运算符

违背示例:

reg[7:0] data1; 
reg[7:0] data2; 
wire[7:0] out_reg; 
assign  out_reg= data1 &&  data2; //违背
建议准则9–建议为parameter 数据和常数指定进制('d,'b,'h,'c) 和位宽

违背示例:

reg[7:0] in11; 
reg      out1; always@( in1)if( in1 == 'b101)//违背out1 = 'b0;//违背else out1 = 'b1 ; //违背

遵循示例:

reg[7:0] in11; 
reg      out1; always@( in1)if( in1 == 3'b101)//遵循out1 = 1'b0;//遵循else out1 = 1'b1 ; //遵循
四、总结

文章详细介绍了军用FPGA软件编程中使用Verilog语言时应遵守的一系列编码规范,特别是针对三态缓冲器和运算符的设计准则。文章中提出的强制准则包括:
基本编程规范之三态缓冲器
强制准则1—禁止组合逻辑电路的输出作为三态缓冲器的使能端
强制准则2—禁止使用内部三态
强制准则3—避免将双向端口直接连接输入端口或输出端口
基本编程规范之运算符
强制准则1----关系操作符左边与右边的数据位宽必须一致
强制准则2----位操作符左边与右边的数据位宽必须一致
强制准则3----禁止在算术表达式中同时出现无符号数和有符号数
强制准则4----禁止在关系表达式中使用包含“x”或者“z”的值
强制准则5—禁止在算术操作时使用包含 “x” 或者“z ”的值
强制准则6–在数值<位宽×进制×数字>表示中,数值位宽必须与数值的实际位宽一致
强制准则7–禁止算术运算结果出现位宽溢出
建议准则8–避免在向量运算中使用逻辑运算符
建议准则9–建议为parameter 数据和常数指定进制('d,'b,'h,'c) 和位宽

文章通过具体的代码示例展示了遵循和违反这些准则的不同情况,强调了遵守这些规范对于确保军用FPGA软件的稳定性和可靠性至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34642.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS justify-content 不生效的原因 失效

MDN文档&#xff1a; https://developer.mozilla.org/zh-CN/docs/Web/CSS/justify-content CSS justify-content 属性定义浏览器如何沿着弹性容器的主轴和网格容器的行向轴分配内容元素之间和周围的空间。 justify-content什么情况下会不生效&#xff08;失效&#xff09;&a…

在码云(Gitee)上建立分支(Branch)的步骤如下:

步骤一&#xff1a;登录码云 首先&#xff0c;打开码云的官方网站&#xff08;gitee.com&#xff09;&#xff0c;输入用户名和密码登录你的账号。 步骤二&#xff1a;创建仓库 登录后&#xff0c;在页面右上方的搜索框中输入仓库名称&#xff0c;并点击“创建”按钮创建新的仓…

API-表单全选反选案例

学习目标&#xff1a; 掌握表单全选反选案例 学习内容&#xff1a; 案例css伪类选择器checked 案例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"…

《看不影子的少年》一部探讨偏见与接纳的电视剧❗

《看不见影子的少年》这部电视剧以其独特的视角和深刻的主题 给我留下了深刻的印象。该剧讲述了一位与众不同的少年 他无法在阳光下留下影子&#xff0c;象征着他在社会中的孤独与不被理解 观看过程中&#xff0c;可以感受到少年内心的挣扎与渴望 他渴望被接纳&#xff0c;渴…

APM教程-SkyWalking安装和配置

SkyWalking简介 APM (Application Performance Management) 即应用性能管理&#xff0c;属于IT运维管理&#xff08;ITOM)范畴。主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化&#xff0c;提高企业IT应用的可靠性和质量&#xff0c;保证用户得到良好的服务&#…

Java如何设置Map过期时间的的几种方法

一、技术背景 在实际的项目开发中&#xff0c;我们经常会使用到缓存中间件&#xff08;如redis、MemCache等&#xff09;来帮助我们提高系统的可用性和健壮性。 但是很多时候如果项目比较简单&#xff0c;就没有必要为了使用缓存而专门引入Redis等等中间件来加重系统的复杂性…

oracle开放某些视图给特定用户,查询报视图不存在问题

以sysdba身份登录到Oracle数据库。 创建新用户。例如&#xff0c;创建一个名为new_user的用户&#xff0c;密码为password&#xff1a; CREATE USER new_user IDENTIFIED BY password;为新用户分配表空间和临时表空间。例如&#xff0c;将表空间users和临时表空间temp分配给新…

数据库精选题(七)(综合模拟题二)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;数据库 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 一、名词解释 1、事务 2、弱实体集 3、正…

chatglm系列知识

一、目录 chatglm 是什么语言模型与transformer decoder 的区别解释prefix LM与Cause LMchatglm&#xff08;prefix LM&#xff09;与decoder-only LM 核心区别glm 架构chatglm 预训练方式chatglm 微调chatglm与chatglm2、chatglm3的区别chatglm 激活函数采用gelu, 为什么chat…

06 - matlab m_map地学绘图工具基础函数 - 绘制海岸线

06 - matlab m_map地学绘图工具基础函数 - 绘制海岸线 0. 引言1. 关于m_coast2. 关于m_gshhs3. 关于m_gshhs_c、m_gshhs_I、m_gshhs_i、m_gshhs_h、m_gshhs_f4. 关于m_shaperead5. 结语 0. 引言 本篇介绍下m_map中添加绘制海岸线的一系列函数及其用法&#xff0c;主要函数包括m…

PHP框架详解:Symfony框架的深度剖析

PHP框架详解&#xff1a;Symfony框架的深度剖析 摘要&#xff1a; Symfony是当前最受欢迎的PHP框架之一&#xff0c;它以其强大的功能和灵活性而闻名。本文将详细介绍Symfony框架的核心概念、架构、组件以及其实践应用&#xff0c;帮助读者深入理解这一框架的优势和使用场景。…

【HTML03】HTML表单语法笔记,附带案例-作业

文章目录 表单概述一、表单容器&#xff08;form&#xff09;二、控件相关单词获取本次课程作业和案例 表单概述 允许用户输入信息&#xff0c;和提交信息的-收集用户信息。 表单&#xff1a;表单容器表单控件组成。 控件&#xff1a;输入框、单选按钮、多选、下拉框、多行文…

分布式数据库系统MyCat

MyCat简介 MyCat是一个开源的分布式数据库系统&#xff0c;是一个实现了MySQL协议的服务器&#xff0c;前端用户可以把它看作是一个数据库代理&#xff0c;用MySQL客户端工具和命令行访问&#xff0c;而其后端可以用MySQL原生协议与多个MySQL服务器通信&#xff0c;也可以用JD…

FreeRTOS实时操作系统

1.认识实施操作系统 1.1 裸机和实时操作系统 裸机&#xff1a; 早期嵌入式开发没有嵌入式操作系统的概念&#xff0c;直接操作裸机&#xff0c;在裸机上写程序&#xff0c;比如用51单片机基本就没有操作系统的概念。 通常把程序设计为前后台系统&#xff0c;主要分为两部分&a…

Redis(超详细)

Redis Redis概念&#xff1a; Redis是开源的&#xff0c;遵循BSD的&#xff0c;基于内存数据存储&#xff0c;被用于作为数据库、缓存机制、消息中间件&#xff1b; Redis的特点&#xff1a; 1.高性能key/valu内存xing数据库&#xff1b; 2.支持丰富的数据类型 3.支持持久化&am…

信息系统分析与设计:重点内容|UML在线绘制|数据库技术

目录 UML在线绘图工具信息系统分析与设计第1章 系统思想第2章 信息、管理与信息系统第3章 信息系统建设概论&#x1f31f;第4章 系统规划&#x1f31f;第5章 系统分析概述第6章 流程建模&#x1f31f;业务流程图DFD数据流图&#x1f31f;数据字典 第7章 用例建模(用例图)&#…

Docker搭建yolov8并训练、验证、推理化学仪器数据集

目录 1、安装docker 2、创建yolov8镜像 3、下载代码包 4、下载模型预训练权重 5、制作数据集 6、训练、验证及推理 &#xff08;1&#xff09;训练 &#xff08;2&#xff09;验证 &#xff08;3&#xff09;推理 中文标签显示问题 本文通过docker的方式搭建yolov8运…

OnlyOffice:现代办公的最佳选择

目录 安装 使用 评价 对比&#xff08;与WPS&#xff09; 总结 在当今的数字化办公时代&#xff0c;选择一款功能全面且易于使用的办公软件至关重要。OnlyOffice作为一款现代化的办公软件&#xff0c;凭借其强大的功能和友好的用户体验&#xff0c;逐渐成为了众多企业和个…

C++ type list 模板

C 实现一个type list 模板&#xff0c;在编译期计算。这个type list主要有构造&#xff0c;列表头类型&#xff0c;列表尾类型&#xff0c;concat操作&#xff0c;去除列表元素重复&#xff0c;获取指定元素&#xff0c;删除指定元素的操作。实现代码贴在下面&#xff1a; #pr…

Linux系统编程项目——FTP网盘

目录 一、项目实现的功能 二、项目实现思路 2.1 socket服务器和客户端开发步骤&#xff1a; 2.2 指令的实现思路&#xff1a; 三、项目用到的函数 3.1 判断文件是否存在函数access()原型和头文件&#xff1a; 3.2 字符串输入函数fgets()原型和头文件&#xff1a; 3.3 字…