北邮电子院专业实验报告 下载本文

电子工程学院

ASIC专业实验报告

班级: 姓名: 学号: 班内序号:

第一部分 语言级仿真

LAB 1:简单的组合逻辑设计

一、 二、

实验目的 实验原理

掌握基本组合逻辑电路的实现方法。

本实验中描述的是一个可综合的二选一开关,它的功能是当sel = 0时,给出out = a,否则给出结果out = b。在Verilog HDL中,描述组合逻辑时常使用assign结构。equal=(a==b)?1:0是一种在组合逻辑实现分支判断时常用的格式。parameter定义的size参数决定位宽。测试模块用于检测模块设计的是否正确,它给出模块的输入信号,观察模块的内部信号和输出信号。

三、 源代码

mux.v

module scale_mux(out,sel,b,a); parameter size=1; output[size-1:0] out; input[size-1:0]b,a; input sel;

assign out = (!sel)?a: (sel)?b:

{size{1'bx}}; endmodule

mux_test.v `define width 8 `timescale 1 ns/1 ns module mux_test; reg[`width:1]a,b; wire[`width:1]out; reg sel;

scale_mux#(`width)m1(.out(out),.sel(sel),.b(b),.a(a)); initial begin

$monitor($stime,,\ $dumpvars(2,mux_test);

sel=0;b={`width{1'b0}};a={`width{1'b1}}; #5sel=0;b={`width{1'b1}};a={`width{1'b0}}; #5sel=1;b={`width{1'b0}};a={`width{1'b1}}; #5sel=1;b={`width{1'b1}};a={`width{1'b0}}; #5 $finish; end

endmodule

四、 仿真结果与波形

LAB 2:简单时序逻辑电路的设计

一、 二、

实验目的 实验原理

掌握基本时序逻辑电路的实现。

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型中,我们常使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑。

在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位。

三、 源代码

counter.v

`timescale 1 ns/100 ps

module counter(cnt,clk,data,rst_,load);

output[4:0]cnt ; input [4:0]data;

input clk; input rst_; input load; reg [4:0]cnt;

always@(posedge clk or negedge rst_) if(!rst_)

#1.2 cnt<=0; else if(load)

cnt<=#3 data; else

cnt<=#4 cnt + 1; endmodule

counter_test.v `timescale 1 ns/1 ns module counter_test;

wire[4:0]cnt; reg [4:0]data; reg rst_; reg load; reg clk;

counter c1 (

.cnt (cnt),