资讯详情

Verilog数字系统设计教程第三部分练习五

提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档

前言

一、简单指令翻译电路

1.1 程序语句:

1.2 testbench语句:

1.3 仿真波形:

二、八路数据选择器

2.1 程序语句:

2.2 testbench语句:

2.3 仿真波形:

总结



前言

用always块实现复杂的组合逻辑电路。

一、简单指令翻译电路

1.1 程序语句:

`define plus 3'd0 `define minus 3'd1 `define band 3'd2 `define bor 3'd3 `define unegate 3'd4  module alu(a, b, opcode, out); input [7:0]a, b; input [2:0]opcode; output [7:0]out; reg [7:0]out;  always @(opcode or a or b)  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

1.2 testbench语句:

`timescale 1 ns/ 1 ns module alu_vlg_tst(); reg [7:0] a; reg [7:0] b; reg [2:0] opcode;                                               wire [7:0]  out; parameter times = 5;                           alu i1 (     .a(a),  .b(b),  .opcode(opcode),  .out(out) ); initial                                                  begin   a = {$random} %6;   b = {$random} %6;   opcode = 3'h0;   repeat(times)    begin     #100 a = {$random} %6;        b = {$random} %6;        opcode = opcode   1;    end   #100 $stop;  end endmodule

1.3 仿真波形:

二、八路数据选择器

2.1 程序语句:

module MUX8_1(in0,in1,in2,in3,in4,in5,in6,in7,out,sel); input [3:0]in0,in1,in2,in3,in4,in5,in6,in7; input [2:0]sel; output [3:0]out; reg [3:0]out;  always @(sel or in0 or in1 or in2 or in3 or in4 or in5 or in6 or in7)  begin   case(sel)    3'b000: out = in0;    3'b001: out = in1;    3'b010: out = in2;    3'b011: out = in3;    3'b100: out = in4;    3'b101: out = in5;    3'b110: out = in6;    3'b111: out = in7;    default: out = 4'bx;   endcase  end endmodule

2.2 testbench语句:

`timescale 1 ns/ 1 ns module MUX8_1_vlg_tst(); reg [3:0] in0,in1,in2,in3,in4,in5,in6,in7; reg [2:0] sel;                                               wire [3:0] out; parameter times = 10;                           MUX8_1 i1 (    .in0(in0),  .in1(in1),  .in2(in2),  .in3(in3),  .in4(in4),  .in5(in5),  .in6(in6),  .in7(in7),  .out(out),  .sel(sel) ); initial                                                  begin   in0 = {$random} ;   in1 = {$random} ;   in2 = {$random} ;   in3 = {$random} ;   in4 = {$random} ;   in5 = {$random} ;   in6 = {$random} ;   in7 = {$random} ;   sel = {$random} %8;   repeat (times)    begin     #100 in0 = {$random} ;       in1 = {$random} ;       in2 = {$random} ;       in3 = {$random} ;       in4 = {$random} ;       in5 = {$random} ;       in6 = {$random} ;       in7 = {$random} ;       sel = {$random} %8;    end   #100 $stop;  end      endmodule 

2.3 仿真波形:

总结

ModelSim默认情况下,模拟中的波形文件是二进制,在模拟过程中将其改为十六进制可能更方便。显示十六进制的信号处,右键Radix选择hexadecimal即可。

标签: 接近开关移位传感器vlg10

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司