eric2013 发表于 2013-1-30 13:03:05

Verilog设计练习进阶(5)-------用always块实现较复杂的组合逻辑电路

此程序实现简单的ALU
`define plus    3'd0
`define minus   3'd1
`define band    3'd2
`define bor   3'd3
`define unegate 3'd4
moduleverilog_prj(out,opcode,a,b);
output out;
reg    out;
input opcode;
input a,b;            //操作数。
always@(opcode or a or b)    //电平敏感的 always块
begin
      case(opcode)
          `plus:   out = a+b;   //加操作。
          `minus:    out = a-b;//减操作。
          `band:   out = a&b;   //求与。
          `bor:      out = a|b;   //求或。
          `unegate:out=~a; //求反。
          default:   out=8'hx;//未收到指令时,输出任意态。
      endcase
end
endmodule
测试模块
`timescale 1 ns/ 1 ps
module verilog_prj_vlg_tst();
// constants                                          
// general purpose registers
reg eachvec;
// test vector input registers
reg a;
reg b;
reg opcode;
// wires                                             
wire out;
// assign statements (if any)                        
verilog_prj i1 (
// port map - connection between master ports and signals/registers   
    .a(a),
    .b(b),
    .opcode(opcode),
    .out(out)
);
parameter   times=5;
   initial
    begin   
      a={$random}%256;//Give a radom number blongs to .
      b={$random}%256;//Give a radom number blongs to .
      opcode=3'h0;
      repeat(times)
          begin
          #100   a={$random}%256;//Give a radom number.
                   b={$random}%256;//Give a radom number.
                   opcode=opcode+1;
          end               
      #100$stop;            
   end                                                
endmodule

eric2013 发表于 2013-1-30 13:04:19

eric2013 发表于 2013-1-30 13:05:42

页: [1]
查看完整版本: Verilog设计练习进阶(5)-------用always块实现较复杂的组合逻辑电路