提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档
前言
一、简单指令翻译电路
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即可。