03 可配置表决器设计与功能验证(附源码)


虚拟机:VMware -14.0.0.24051
环 境:ubuntu 18.04.1
脚 本:makefile(点击直达)
应用工具:vcs 和 verdi


文章目录

  • 一、Demand
  • 二、Block Diagram
  • 三、Design and Functional Verification
  • (1)RTL
  • (2)Test Bench
  • 四、Result


一、Demand

  实现参数化表决功能,可配置为2N+1人表决功能,多数表决通过则通过。在模块中定义一个N位的输入in来表示N个参与表决的人,然后利用for循环计算in中有多少位为1,如果有大于等于(N+1)/2位的1,则表示多数人同意,通过,反之不通过。


二、Block Diagram

在这里插入图片描述在这里插入图片描述


三、Design and Functional Verification

(1)RTL

//-- modified by xlinxdu, 2022/04/26module vote
#(parameter NUM   = 3,parameter WIDTH = 2
)
(input                clk_i  ,input                rst_n_i,input      [NUM-1:0] in     ,output reg           pass_o
);reg     [WIDTH-1:0]  cnt ;integer              i   ;wire                 pass;always @ (*) begincnt = 2'b0;for(i=0;i<NUM;i=i+1) begincnt = cnt + in[i];end
endassign pass = (cnt >= ((NUM+1)/2))? 1'b1:1'b0;always @ (posedge clk_i or negedge rst_n_i) beginif (!rst_n_i) beginpass_o <= 1'b0;endelse beginpass_o <= pass;end
end
endmodule

(2)Test Bench

//-- modified by xlinxdu, 2022/04/26
module tb_vote;reg clk_i;reg rst_n_i;reg [2:0] in;wire      pass_o;initial beginclk_i = 0 ;rst_n_i = 1;in = 3'b000;#10 rst_n_i = 0;#10 rst_n_i = 1;
end
always #50 in = {$random}%7;
always #25 clk_i = ~clk_i;vote tb_vote(.clk_i(clk_i),.rst_n_i(rst_n_i),.in(in),.pass_o(pass_o));initial begin#10000 $finish;$fsdbDumpfile(".fsdb");$fsdbDumpvars            ;$fsdbDumpMDA             ;
endendmodule

四、Result

在这里插入图片描述

  由上述结果可知,在配置N=3是,多数人即大于等于两人表决则表示通过,pass输出1,模块数据通路是正常的,功能验证通过。
注意:在计算个数时,需要初始化cnt的值。


作者:xlinxdu
版权:本文是作者原创,版权归作者所有。
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部