(原创)system verilog——加法树乘法器

加法树乘法器的system verilog的实现,由于逻辑功能简单明了,只用了简单的断言验证,

如果有疑问请给我留言

ContractedBlock.gif ExpandedBlockStart.gif Code
 1 `timescale 1ns/10ps 
 
2 module mult(clk,a,b,result);
 
3 parameter cmp_sva=1'b1;//assertion enable
 4 input clk;
 
5 input [7:0] a;
 
6 input [7:0] b;
 
7 output [15:0] result;
 
8 
 
9 wire[10:0] result_low;
10 wire[14:0] result_high;
11 
12 logic [7:0] result0;
13 logic [8:0] result1;
14 logic [9:0] result2;
15 logic [10:0] result3;
16 logic [11:0] result4;
17 logic [12:0] result5;
18 logic [13:0] result6;
19 logic [14:0] result7;
20 logic [8:0] out0;
21 logic [10:0] out1;
22 logic [12:0] out2;
23 logic [14:0] out3;
24 logic [15:0] result_sva;//asserction result
25 
26 function[7:0] mux;
27 input [7:0] operand;
28 input select;
29 begin
30 mux=select?operand:8'b00000000;
31 end
32 endfunction
33 always@(a or b)
34 begin
35 result0<=mux(a,b[0]);
36 result1<=mux(a,b[1])<<1;
37 result2<=mux(a,b[2])<<2;
38 result3<=mux(a,b[3])<<3;
39 result4<=mux(a,b[4])<<4;
40 result5<=mux(a,b[5])<<5;
41 result6<=mux(a,b[6])<<6;
42 result7<=mux(a,b[7])<<7;
43 end
44 
45 always@*
46 begin
47 out0<=result0+result1;
48 out1<=result2+result3;
49 out2<=result4+result5;
50 out3<=result6+result7;
51 end
52 
53 assign result_low=out0+out1;
54 assign result_high=out2+out3;
55 assign result=result_low+result_high;
56 
57 
58 //sva check
59 always@(a or b)
60 if(cmp_sva)
61 begin
62 result_sva=a*b;
63 #1 a_cmp:assert(result_sva==result)
64 else 
65  $display("result error at %d",$time);
66 end
67 endmodule 
68 
69  `timescale 1ns/10ps 
70 module mult_testbench;
71 reg clk;
72 reg [7:0] a;
73 reg [7:0] b;
74 wire[15:0] result;
75 mult #(1)
76  mult_inst(.clk(clk),
77                .a(a),
78                .b(b),
79                .result(result)
80 );
81 initial
82 begin
83     clk=0;
84     #10;
85     a=8;
86     b=9;
87     #10;
88     a=16;
89     b=16;
90     #200 $finish;
91 end
92 initial
93 begin
94     $monitor("%d*%d=%d at %d",a,b,result,$time);
95 end
96 always #5 clk=~clk;
97 endmodule
完整代码:  

mult_sv.rar

转载于:https://www.cnblogs.com/changlong/archive/2008/12/24/1361217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值