栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Verilog实战】可配置表决器设计与功能验证(附源码)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Verilog实战】可配置表决器设计与功能验证(附源码)


虚拟机: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= ((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
(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 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
版权:本文是作者原创,版权归作者所有。
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/834884.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号