SystemVerilog 简单ALU模型

//definitions.sv

 1 `ifndef DEFS_DONE
2 `define DEFS_DONE
3 package definitions;
4
5 parameter VERSION = "1.1";
6
7 typedef enum bit [1:0]{ADD, SUB, MUL} opcodes_t;
8
9 typedef struct{
10 logic [31:0] a, b;
11 opcodes_t opcode;
12 }instruction_t;
13
14 function automatic [31:0] multiplier(input [31:0] a, b);
15 return a*b;
16 endfunction
17
18 endpackage
19
20 import definitions::*;
21
22 `endif

//ALU.sv

 1 `include "definitions.sv"
2 module ALU(
3 input instruction_t IW,
4 input logic clock,
5 output logic [31:0] result
6 );
7
8 always_comb begin
9 case (IW.opcode)
10 ADD : result = IW.a + IW.b;
11 SUB : result = IW.a - IW.b;
12 MUL : result = multiplier(IW.a, IW.b);
13 endcase
14 end
15 endmodule

//test.sv

 1 `include "definitions.sv"
2
3 module test;
4
5 instruction_t test_word;
6 logic [31:0] alu_out;
7 logic clock = 0;
8
9 ALU dut (.IW(test_word), .result(alu_out), .clock(clock));
10
11 always #10 clock = ~ clock;
12
13 initial begin
14
15 @(negedge clock)
16 test_word.a = 5;
17 test_word.b = 7;
18 test_word.opcode = ADD;
19 @(negedge clock)
20 $display("alu_out = %d (expected 12)", alu_out);
21 $finish;
22 end
23
24 endmodule




 

posted on 2012-03-05 16:04  Neddy11 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/Neddy/archive/2012/03/05/2380571.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值