虚拟机: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/26 module 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 @ (*) begin cnt = 2'b0; for(i=0;i(2)Test Bench= ((NUM+1)/2))? 1'b1:1'b0; always @ (posedge clk_i or negedge rst_n_i) begin if (!rst_n_i) begin pass_o <= 1'b0; end else begin pass_o <= pass; end end endmodule
//-- modified by xlinxdu, 2022/04/26
module tb_vote;
reg clk_i;
reg rst_n_i;
reg [2:0] in;
wire pass_o;
initial begin
clk_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 ;
end
endmodule
四、Result
由上述结果可知,在配置N=3是,多数人即大于等于两人表决则表示通过,pass输出1,模块数据通路是正常的,功能验证通过。
注意:在计算个数时,需要初始化cnt的值。
作者:xlinxdu
版权:本文是作者原创,版权归作者所有。
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。



