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

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

语言 :Verilg HDL

EDA工具:ISE、Vivado、Quartus II

一、引言

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

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

违背示例:

bash 复制代码
module top( en1,en2,din,dout)
input en1;
input en2;
input din; 
 
 
output reg dout; 
 

always@(en1,en2,din)  begin
    if( en1 & en2)       //违背
        dout<= din ; 
     else 
        out1 <= 1'bz;  
end
 
endmodule
强制准则2---禁止使用内部三态
强制准则3---避免将双向端口直接连接输入端口或输出端口

违背示例:

bash 复制代码
module top(  din,  dout,data )
input din;
inout data;
output dout; 
wire dout ; 
wire data

assign  data = din;   //违背
 
...
endmodule
三、基本编程规范之运算符
强制准则1----关系操作符左边与右边的数据位宽必须一致

违背示例:

bash 复制代码
 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 ; //违背

遵循示例:

bash 复制代码
 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----位操作符左边与右边的数据位宽必须一致

违背示例:

bash 复制代码
 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; //违背

遵循示例:

bash 复制代码
 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----禁止在算术表达式中同时出现无符号数和有符号数

违背示例:

bash 复制代码
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  )   begin
	 
   dout  = {din1[1],din1} + {1'b0,din2}; //违背
end
 
endmodule

遵循示例:

bash 复制代码
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  )   begin
	 
   dout  = {1'b0,din1} + {1'b0,din2}; //违背
end
 
endmodule
强制准则4----禁止在关系表达式中使用包含"x"或者"z"的值

违背示例:

bash 复制代码
if( temp > 2'bzz)
强制准则5---禁止在算术操作时使用包含 "x" 或者"z "的值

违背示例:

bash 复制代码
reg[1:0] data1 ; 
reg[1:0] data2 ; 

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

违背示例:

bash 复制代码
reg[3:0] temp; 
 

always@( posedge clk_40m) 
if( !rst_n)
  temp<= 2'd10 ; //违背
 

遵循示例:

bash 复制代码
reg[3:0] temp; 
 

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

违背示例:

bash 复制代码
wire[7:0] temp; 
wire[7:0] temp1; 
wire[7:0] temp2; 
assign  temp = temp1 + temp2 ; //违背
 

遵循示例:

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

违背示例:

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

违背示例:

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

遵循示例:

bash 复制代码
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软件的稳定性和可靠性至关重要。

相关推荐
无奈笑天下5 小时前
【麒麟镜像vmtools异常排查指导书】
linux·运维·经验分享·云计算·kylin
大数据追光猿5 小时前
【大数据Doris】生产环境,Doris主键模型全表7000万数据更新写入为什么那么慢?
大数据·经验分享·笔记·性能优化·doris
不会学习?6 小时前
markdown笔记分享
经验分享·笔记
MaximusCoder6 小时前
Linux信息收集Command
运维·服务器·经验分享
Aaron15886 小时前
AD9084和Versal RF系列具体应用案例对比分析
嵌入式硬件·算法·fpga开发·硬件架构·硬件工程·信号处理·基带工程
芯片智造8 小时前
为什么在芯片互连中,介质的k值一直在降低?
经验分享·半导体·芯片制造·芯片互联
FPGA小迷弟9 小时前
modelsim使用教程,仿真技巧,精华帖
fpga开发·verilog·fpga·modelsim
无奈笑天下9 小时前
银河麒麟V10虚拟机安装vmtools报错:/bin/bash解释器错误, 权限不够
linux·运维·服务器·开发语言·经验分享·bash
华舞灵瞳11 小时前
学习FPGA(八)快速傅里叶变换
学习·fpga开发
stars-he15 小时前
FPGA学习笔记(7)以太网UDP数据报文发送电路设计(一)
笔记·网络协议·学习·fpga开发·udp