begin a=4'h3;
$display(\ #100 a=4'h7;
$display(\ #100 a=4'hf;
$display(\ #100 a=4'ha;
$display(\ #100 a=4'h2;
$display(\
#100 $display(\ $stop; end
non_blocking non_blocking(clk,a,b2,c2); blocking blocking(clk,a,b1,c1); endmodule
五.综合仿真结果
实验五 用always块实现较复杂的组合逻辑:
一.实验目的:
1.掌握用always实现较大组合逻辑电路的方法。
2.进一步了解assign与always两种组合电路实现方法的区别和注意点。 3.学习测试模块中随机数的产生和应用。 4.学习综合不同层次的仿真,并比较结果 二.实验设备:
安装Modelsim-6.5c的PC机。 三.实验内容:
设计一个简单的指令译码电路,该电路通过对指令的判断,对输入数据执行相应的操作,包括加、减、与、或和求反,并且无论是指令作用的数据还是指令本身发生变化,都有要作出及时的反应。
四.实验代码
`define plus 3'd0
`define minus 3'd1 `define band 3'd2 `define bor 3'd3 `define unegate 3'd4
module alu(out,opcode,a,b); output [7:0]out; reg [7:0]out;
input [2:0]opcode; input [7:0]a,b;
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
`timescale 1ns/1ns module alutest; wire [7:0]out; reg [7:0]a,b; reg [2:0]opcode; parameter times=5; 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
alu alu1(out,opcode,a,b); endmodule
五.综合仿真结果
实验六 在 Verilog HDL中使用函数
一.实验目的:
1.了解函数的定义和在模块设计中的使用。 2.了解函数的可综合性问题。
3.了解许多综合器不能综合复杂的算术运算。 二.实验设备:
安装Modelsim-6.5c的PC机。 三.实验内容:
做一个函数调用的示例,采用同步时钟触发运算的执行,每个clk时钟周期执行一次运算,在测试模块中,调用系统任务$display及在时钟的下降沿显示每次运算的结果。
四.实验代码
module tryfunct(clk,n,result,reset); output [31:0]result; input [3:0]n; input reset,clk; reg [31:0]result;
always @(posedge clk) begin
if(!reset) result<=0; else begin
result<=n*factorial(n)/((n*2)+1); end end
function [31:0]factorial; input [3:0]operand; reg [3:0]index; begin
factorial=operand? 1:0;
for(index=2;index<=operand;index=index+1) factorial=index*factorial; end
endfunction