专用集成电路CMOS上机,verilog语言,modelsim软件仿真

更新时间:2024-01-15 18:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《专用集成电路设计基础》电路设计实验

实验1——简单状态机实验 (循环彩灯控制电路)

1、 电路功能

设计一套循环彩灯控制电路,要求:

(1) 共有16个彩色灯组,每只彩灯用一个控制信号控制器点亮和关闭(“1”——点

亮;“0”——关闭); 注:彩灯排放顺序

D E F 0 1 2 C 3 B 4 A 9 8 7 6 6

(2) 彩灯闪烁频率可以通过编程进行控制; (3) 彩灯闪烁顺序及图案可以进行修改。 2、 电路设计

采用Verilog HDL硬件描述语言进行,用ModelSim EDA软件进行仿真。

(1) 彩灯控制电路设计:

//***** ASIC Exercise - 1 ***** //*** Counter + Decoder ***

//*** can be used to control colour lamps *** //*** colour lamps arrangement *** //******************* //*** d e f 0 1 2 *** //*** c 3 *** //*** b 4 *** //*** a 9 8 7 6 5 *** //*******************

module exercise_1 (reset,clk,load,data_in,

lamp_ctl);

//* input/output ports definition * input reset,clk,load; input [3:0] data_in;

output [15:0] lamp_ctl; reg [15:0] lamp_ctl;

//* in-circuit signals definition * wire ena;

reg [3:0] cnt1,cnt2; reg [15:0] lamp;

//* circuit RTL description *

//* 4-bit mode-16 counter with sync_data load* //* used as freq_divider *

always @(posedge reset or posedge clk) if (reset)

cnt1 <= 4'b0000; else if (load)

cnt1 <= data_in;

else if (cnt1 == 4'b1111) cnt1 <= data_in; else

cnt1 <= cnt1 + 1'b1;

assign ena = &cnt1;

//* 4-bit mode-16 counter *

always @(posedge reset or posedge clk) if (reset)

cnt2 <= 4'b0000; else if (ena) begin

if (cnt2 == 4'b1111) cnt2 <= 4'b0000; else

cnt2 <= cnt2 + 1'b1; end

//* 4-16 decoder *

always @(reset or cnt2) begin

if (reset)

lamp = 16'h0000; else

case (cnt2)

4'b0000 : lamp = 16'b0000_0000_0000_0001; 4'b0001 : lamp = 16'b0000_0000_0000_0010; 4'b0010 : lamp = 16'b0000_0000_0000_0100; 4'b0011 : lamp = 16'b0000_0000_0000_1000; 4'b0100 : lamp = 16'b0000_0000_0001_0000; 4'b0101 : lamp = 16'b0000_0000_0010_0000; 4'b0110 : lamp = 16'b0000_0000_0100_0000; 4'b0111 : lamp = 16'b0000_0000_1000_0000; 4'b1000 : lamp = 16'b0000_0001_0000_0000; 4'b1001 : lamp = 16'b0000_0010_0000_0000; 4'b1010 : lamp = 16'b0000_0100_0000_0000; 4'b1011 : lamp = 16'b0000_1000_0000_0000; 4'b1100 : lamp = 16'b0001_0000_0000_0000; 4'b1101 : lamp = 16'b0010_0000_0000_0000; 4'b1110 : lamp = 16'b0100_0000_0000_0000; 4'b1111 : lamp = 16'b1000_0000_0000_0000; default : lamp = 16'b0000_0000_0000_0000; endcase end

//* latch the output control signal * always @(posedge reset or posedge clk) if (reset)

lamp_ctl <= 16'h0000; else

lamp_ctl <= lamp;

endmodule

(2) 测试向量设计:

//*** test bench ***

`timescale 1ns/1ps

module testbench ( );

//*** test signal definition *** reg t_reset,t_clk,t_load; reg [3:0] t_data_in; wire [15:0] lamp_show;

//*** test signal generation ***

//* t_reset *

//*** t_reset *** initial begin #0 t_reset = 1'b1; #2000 t_reset = 1'b0; end

//*** t_clk *** initial begin

t_clk = 1'b0; end

always #500 t_clk = ~t_clk;

//*** t_ena *** initial begin

#0 t_load = 1'b0; #2000 t_load = 1'b1; #3000 t_load = 1'b0; end

//* t_data_in * initial begin

#0 t_data_in = 4'b0000; #3000 t_data_in = 4'b1000; end

//*** connect with the circuit to be tested *** //*** use component instantiation statement ***

exercise_1 u0 (.reset(t_reset),.clk(t_clk),.load(t_load),.data_in(t_data_in), .lamp_ctl(lamp_show));

endmodule

3、 实验内容

(1) 详细分析实验电路的设计,明确电路结构及各个功能部件的功能,并在ModelSim

EDA软件环境下对其进行初步的仿真验证;

(2) 更改测试文件相关部分的数值,改变彩灯的闪烁频率(与系统时钟信号clk进行

比较);

(3) 将0?1?2?3?……?E?F的顺时针点亮方式更改为F?E?……?2?1?0的逆

时针点亮方式;

方法1:将彩灯点亮顺序计数器改变为递减计数模式;

方法2:你能想到采用其他什么样的电路改进方法吗?试一试!!!

(4) 改变彩灯的显示方式,使你的彩灯点亮的与众不同!大胆尝试吧!!!

4、 实验报告中需要解答的问题

(1) 根据对实验电路的分析,绘制出彩灯控制电路详细的电路结构框图,并对每一

功能部件的功能及相关参数的意义进行说明;

(2) 采用Verilog HDL硬件描述语言设计一个具有上电异步复位,同步复位、同步置

数及技术允许控制的4-Bit递增计数器;

(3) 在上面计数器电路的基础上,说明分别实现模-4、模-9及模-13计数的方式与方

法;

(4) 将题(2)中的计数器更改为4-bit递减计数器;

(5) 说明实验中彩灯闪烁方式是如何进行更改的?改进后彩灯的显示效果是什么?

本文来源:https://www.bwwdw.com/article/tzho.html

Top