MAXPLUSII使用指导

Download Report

Transcript MAXPLUSII使用指导

EDA与电子技术课程设计
教材:EDA与数字系统设计
李国丽 朱维勇 栾铭主编
绪论
门电路、触发器等称为逻辑器件;
 由逻辑器件构成,能执行某单一功能的
电路,如计数器、译码器、加法器等,
称为逻辑功能部件;
 由逻辑功能部件组成的能实现复杂功能
的数字电路称数字系统。

图0-1 数字系统框图
数字系统设计方法简介
明确设计要求,确定系统的输入/输出 ;
 确定整体设计方案 ;
 自顶向下(top-down)的模块化设计方
法。

数字系统的设计层次
选用通用集成电路芯片构成数字系统;
 应用可编程逻辑器件实现数字系统;
 设计专用集成电路(单片系统)。

应用可编程逻辑器件(Programmable Logic
Device PLD)实现数字系统设计,是目前利
用EDA(Electronic Design Automation )技术
设计数字系统的潮流。
 这种设计方法以数字系统设计软件为工具,
将传统数字系统设计中的搭建调试用软件仿
真取代,对计算机上建立的系统模型,用测
试码或测试序列测试验证后,将系统实现在
PLD芯片或专用集成电路上,这样最大程度地
缩短了设计和开发时间,降低了成本,提高
了系统的可靠性。

PLD简介

数字集成电路的发展过程:
电子管
晶体管
小中规模集成电路(SSI,MSI)
大规模集成电路(LSI)
超大规模集成电路(VLSIC)
具有特定功能的专用集成电路(Application
Specific Integrated Circuit ASIC)
为使ASIC的设计周期尽可能短, 出现
了现场可编程逻辑器件(Field Programmable
Logic Device FPLD),其中应用最广泛的当
属CPLD和FPGA。
CPLD:Complex Programmable Logic
Device
FPGA :Field Programmable Gate Array
统称为PLD或CPLD/FPGA。
PLD发展过程
早期: PROM、 EPROM 、EEPROM
 70年代中期:Programmable Logic array PLA
 70年代末:美国MMI公司Programmable array
Logic PAL
 80年代中期:Altera公司Generic Array Logic
GAL
共同特点:低密度PLD,结构简单,设计灵活,
规模小,难以实现复杂的逻辑功能。

PLD发展过程


80年代中期:Altera公司 Erasable Programmable
Logic Device EPLD
1985年:Xilinx公司 Field Programmable
Gate Array FPGA
 80年代末:Lattice公司提出In System
Programmable ISP)技术,相继出现了一系列
具备在系统可编程能力的复杂可编程逻辑器件
(Complex Programmab1e Logic Device CPLD)。
共同特点:高密度、高速度、低功耗结构体系
更灵活、适用范围更宽 ,设计风险为零。
PLD发展过程

90年代以后,高密度PLD在生产工艺、
器件的编程和测试技术等方面都有了飞
速发展,CPLD的集成度一般可达数千甚
至上万门 。
Altera的EPF10K10每片含62000158000
个可使用门,重复擦写次数达10万次以
上。

PLA、PAL、GAL、EPLD、FPGA、ISPPLD的基本结构在《数字电子技术基础》
的第八章有介绍
EDA软件种类及各自特点
专门用于开发FPGA和CPLD的EDA工具分为五
个模块:
1 . 设 计 输 入 编 辑 器 ( xilinx 的 Foundation 、
Altera的MAX+plus2等) ;
2 . 仿 真 器 ( 如 Mentor 公 司 的 ModelSim ,
Cadence公司的Verilog-XL,NC-Verilog等) ;
3 . HDL 综 合 器 ( Synopsys 公 司 的 FPGA
Compiler、FPGA Express 等);
4.适配器(或部局布线器)(如Lattice公司的
ispEXPERT 中有自己的适配器);
5.下载器(编程器)。
MAX+Plus210.0(学生版 )支持的器件
1、EPF10K10,EPF10K10A等
2、MAX7000系列(如MAX7000S中的
MAX7128)
3、EPM9320等
MAX+plus2使用练习
图形输入方式(.gdf文件);
 HDL (Hardware Description Language)语
言输入方式
1)VHDL语言 (Very High Speed
Intergated Circuit Hardware Description
Language)
2)Verilog HDL语言

设计过程
设计输入
编译
图形或HDL语言
输入
Compiler
项目校验、
仿真
Simulate
编程或下载
Program或
Configure
步骤
进入Windows操作系统,打开MAX+Plus2;
 启动File\Project\Name 菜单,输入设计文件的
名称(给出文件存储路径);
 点击Assign\Device菜单,选择器件
(EPM7128SLC84-6或EPF10K10LC84-4);
 启动File\New菜单,选择Graphic Editor,打开
原理图编辑器;

原理图设计输入过程
元器件放置;
 在元器件之间添加连线;
 添加输入、输出引脚,并给它们命名;
 保存原理图。

编译
启动MaxplusII/Compiler菜单,选择Start,
开始编译;
 若电路有错,编译器停止编译,并显示
出错信息;
 若电路无错,则编译通过,生
成.sof、.pof文件,以备硬件下载或编程
时用。
 注意:编译只对顶层文件进行

时序模拟仿真
编译通过后就可进行时序模拟:
1、建立波形输入文件:
1)打开菜单File/New,选Waveform Editor File(.scf),OK;
2)在波形编辑器窗口的Name下单击鼠标右键,出现浮
动菜单,选Enter Nodes from SNF…出现对话框;
3)在Type 区选Inputs和 Outputs,单击 List按钮,可在 其
右下方看到设计中的输入输出信号,单击=>可将这些
信号选到Selected Nodes&Groups区,OK;
4)在菜单File中选 Save。
时序模拟仿真
2、编辑输入节点波形:
1)在菜单Options中选中Snap to Grid 和
Show Grid,并打开 Grid Size…设置仿真
时间;
2)使用绘制图形工具条绘制输入节点波形;
3)选File中Save存盘。
时序模拟仿真
3、时序模拟:
1)在菜单Maxplus2中选Simulator;
2) 单击Start,开始模拟;
3)模拟完毕,单击Open Scf得模拟结果,
可对结果进行检查(注意有动态延时和
竞争冒险现象 )。
管脚分配
启动MaxplusII/Floorplan Editor菜单,则
显示该设计项目的管脚分配;
 用户可根据下载板情况,改变管脚分配。

注意

下载板有两种:
1.北京理工达胜科技有限公司生产的下
载板,芯片管脚与外围信号没有连接,需在
实验中由你连接;
2.东南大学东讯通生产的DXT-BIII型EDA
实验开发系统, 芯片管脚与外围信号已连
接好,必须根据下表改变管脚分配.
EPF10K10LC84-4
图1-2-15 PLD引脚与外部人工连接
图1-2-16 PLD引脚与外部器件连接锁定
图1-2-16 PLD管脚与外部器件连接锁定
器件名称
信号名
10K10管
脚
器件名称 信号名
10K10管
脚
输出发光管
L12R
25
数据开关
K2
29
输出发光管
L12G
24
数据开关
K3
30
输出发光管
L11
23
数据开关
K4
35
输出发光管
L10
22
数据开关
K5
36
输出发光管
L9
21
数据开关
K6
37
输出发光管
L8
19
数据开关
K7
38
输出发光管
L7
18
数据开关
K8
39
输出发光管
L6
65
数据开关
K9
47
输出发光管
L5
64
数据开关
K10
48
输出发光管
L4
62
数据开关
K11
49
输出发光管
L3
61
数据开关
K12
50
输出发光管
L2
60
数据开关
K13
51
输出发光管
L1G
59
数据开关
K14
52
输出发光管
L1R
58
数据开关
K15
53
器件名称
信号名
10K10管
脚
器件名称
信号名
10K10管
脚
数码管
M4
M4A
17
扬声器
SP
27
M4B
16
时钟信号
CP1
1
M4C
11
时钟信号
CP2
43
M4D
10
M3A
9
M3B
8
M3C
7
M3D
6
M2A
5
M2B
3
M2C
83
M2D
81
M1A
80
M1B
79
M1C
78
M1D
73
数码管
M3
数码管
M2
数码管
M1
下载
将实验板接口线与计算机并口连接,打
开试验箱电源;
 启动MaxliusII/Programmer菜单;
 如果是第一次使用该软件,启动Options
\Hardware Setup菜单,在Hardware Type
中选择 ByteBlaster(MV)。
 Configure即可完成下载。


注意
若下载后提示下载不成功信息,按以上各步
检查是否设置正确,并检查计算机与实验箱
硬件连接,排除故障,再次尝试下载;
 随时可利用帮助信息(?),解决疑难问题;
 相同名字的导线,在电气上相连(P26);
 器件可以旋转;
 一组输入或一组输出时,可用BUS(组);
 改变管脚后,应再编译一次,再下载。

Verilog HDL语言输入方式







进入Windows操作系统,打开MAX+Plus2;
启动File\Project\Name 菜单,输入设计文件的
名称(给出文件存储路径);
点击Assign\Device菜单,选择器件
(EPM7128SLC84-6或EPF10K10LC84-4);
启动File\New菜单,选择Text Editor file,打开
原理图编辑器;
键入程序;
在File\Save as 保存,生成.v文件;
以下步骤同图形输入法。
•有关Verilog HDL的详细内容参
见第三章(P.98)




注释部分





模块定义行


说明部分



/**************************************************************/
// MODULE:
adder
// FILE NAME:
add.v
// VERSION:
v1.0
// DATE:
May 5th, 2003
// AUTHOR:
Peter
// CODE TYPE:
RTL
// DESCRIPTION: An adder with two inputs (1 bit), one output (2 bits).
/****************************************************/
module adder (in1, in2, sum);
端口列表
input in1,in2;
output [1:0] sum;
wire in1,in2;
reg [1:0] sum;


模块
主体



结束行

always @ (in1 or in2)
begin
sum=in1+in2;
end
endmodule
模块名(必须和存储
时的名称相同)

module decoder(out,in);
 output[7:0] out;
 input[2:0] in;
 reg[7:0] out;


<位宽>’<基数><数值>
d 十进制



h 十六进制

b 二进制

o 八进制







always@(in)
begin
case(in)
3'd0:out=8'b00000001;
3'd1:out=8'b00000010;
3'd2:out=8'b00000100;
3'd3:out=8'b00001000;
3'd4:out=8'b00010000;
3'd5:out=8'b00100000;
3'd6:out=8'b01000000;
3'd7:out=8'b10000000;
endcase
end
endmodule
事件控制的
Always语句,
一直监测输入
信号,只要有
变化,就执行
下面的块语句。
Case语句
Case(敏感表达式)
值1:块语句1;
值2:块语句2;
……
default:块语句
n+1;
endcase

module jsq16(q,clk,reset);
 output[3:0]q;
 reg [3:0]q;
 input clk,reset;
 always @(posedge clk or negedge reset)
if(表达式) 块语句1;
 begin
else 块语句2;
 if(!reset) q[3:0]<=4'b0000;
 else
 q[3:0]<=q[3:0]+4'b0001;
 end
 endmodule
注意
.v文件描述的功能模块可以生成一个符
号,放在用户库中,供其它原理图输入
文件调用,调用的方法与从器件库中取
元器件的方法相同。生成功能模块的方
法为:选择菜单file\create default symbol,
经过与编译相同的过程后,生成的功能
模块被放入用户库,
实验内容和时间安排

星期一上午讲课,完成非门下载
先在F盘中设置一个自己的文件夹,例:F\ lgl
星期一下午星期二:1.2、1.3所有练习
 星期二下午4:00讲课:扫描显示电路
 星期三:完成1.4所有练习
 星期三下午:布置数字系统设计题
 星期四星期五:完成数字系统设计一个

扫描显示
实验室A
扫描显示电路

用发光管的状态验证设计是否满足要求。
在译码器设计时,这种方式是很直观的,
但在计数器设计时,这样的验证方式就
显得很不直观,尤其当计数器的位数增
加时(如百进制计数),太多的发光管
将使结果的读出非常困难。
数码管驱动方式

BCD码驱动
 直接驱动
输入
数码管
输出
D C B A
BCD 码驱动
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
D
CD
C
B
BA
A
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Ya Yb Yc Yd Ye Yf Yg
1
0
1
1
0
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1
1
0
0
1
1
1
1
0
0
1
0
0
1
1
0
1
1
1
1
1
1
1
1
1
0
1
0
0
1
0
1
1
0
1
1
0
1
0
0
1
1
1
1
0
1
0
1
0
0
0
1
0
1
0
1
1
1
1
1
1
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
0
0
1
1
1
1
1
0
1
1
1
1
0
1
1
1
字形
0
1
2
3
4
5
6
7
8
9
A
b
C
d
E
F
东南
大学
实验
箱的
静态
显示
方式
属于
BCD
码驱
动
拨向“静态”
图1-2-16 PLD引脚与外部器件连接锁定
数码管直接驱动
输入
abcdefg
输出字形
1111110
0110000
1101101
1111001
0110011
1011011
1011111
1110000
1111111
1111011
1110111
0011111
1001110
0111101
1001111
1000111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
当采用直接驱动方式时,驱动一个数码管
需要七个电平信号,如果系统用来显示结果
的数码管较多,应考虑数字系统输出信号占
用PLD芯片管脚的问题,因为PLD芯片的管
脚总数是有限的,例如F10K10,它的管脚
总数是84,其中还有一些特定功能的管脚不
能给用户使用,能使用的管脚不到60个,所
以直接驱动时,必须设法减少占用PLD芯片
的管脚的数量。
解决的方法是采用动态扫描显示
动态扫描显示(管脚见表1-2-2)
拨向“动态”
例1-4-1

设计一个电路,使八个数码管依次同时
显示0、1、2、……A、B、…E、F。
module decoder(out,in);
output[7:0] out;
例1-4-1
input[2:0] in;
reg[7:0] out;
always@(in)
begin
case(in)
3'd0:out=8'b00000001;
3'd1:out=8'b00000010;
3'd2:out=8'b00000100;
3'd3:out=8'b00001000;
3'd4:out=8'b00010000;
十
六
进
制
计
数
动态扫
描
字形显
示
module led(a,b,c,d,e,f,g,D);
output a,b,c,d,e,f,g;
input[3:0] D;
reg a,b,c,d,e,f,g;
always
@(D)
begin
case(D)
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
endcase
end
endmodule
3'd5:out=8'b00100000;
3'd6:out=8'b01000000;
3'd7:out=8'b10000000;
endcase
end
endmodule
完全用Verilog HDL完成

东
南
大
学
实
验
箱




















module saomiao(reset,clk,clk1,ms1,ms2,ms3,ms4,
ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);
input clk,reset,clk1;
reg [3:0] in1;
output ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg [3:0] temp,flag;
always@(posedge clk)
begin
{ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000000;
flag=flag+1;
case (flag)
0:begin temp=in1;ms1=1;end
1:begin temp=in1;ms2=1;end
2:begin temp=in1;ms3=1;end
3:begin temp=in1;ms4=1;end
4:begin temp=in1;ms5=1;end
5:begin temp=in1;ms6=1;end
6:begin temp=in1;ms7=1;end
7:begin temp=in1;ms8=1;end
endcase
case(temp)
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
default:{a,b,c,d,e,f,g}=7'b1111110;
endcase
end
always@(posedge clk1)
begin if(!reset) in1=4'b0000;

else begin in1=in1+1;
end
end
endmodule
例1-4-2 设计一个电路,使两个数码管显示112的十二进
制计数,两个数码管显示059的六十进制计数。
注意:十二进制计数器自行设计
问题是要把两个计数器输出的个位和十位数分别显示在
不同的数码管上,用Sel模块实现。
原理是:in1,in2……in8为八个数码管的BCD码输入端数据,
MS1有效时,in1的数据送MS1显示;
MS2有效时,in2的数据送MS2显示;
……
MS8有效时,in8的数据送MS8显示。
八组数据可以不全部都有,如此例中,十二进制数的低四位
送in1,高四位送in2,六十进制数的低四位送in3,高四位送in4,
其余数据端为空。




















module
sel(in1,in2,in3,in4,in5,in6,in7,in8,clk,ms1,ms2,ms
3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g);
input clk;
input [3:0] in1,in2,in3,in4,in5,in6,in7,in8;
output
ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg
ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8,a,b,c,d,e,f,g;
reg [3:0] temp,flag;
always@(posedge clk)
begin
{ms1,ms2,ms3,ms4,ms5,ms6,ms7,ms8}=8'b00000
000;
flag=flag+1;
case (flag)
0:begin temp=in1;ms1=1;end
1:begin temp=in2;ms2=1;end
2:begin temp=in3;ms3=1;end
3:begin temp=in4;ms4=1;end
4:begin temp=in5;ms5=1;end
5:begin temp=in6;ms6=1;end
6:begin temp=in7;ms7=1;end
7:begin temp=in8;ms8=1;end
endcase
case(temp)
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
default:{a,b,c,d,e,f,g}=7'b1111110;
endcase
end
endmodule
End
扫描显示
实验室B
扫描显示电路

用发光管的状态验证设计是否满足要求。
在译码器设计时,这种方式是很直观的,
但在计数器设计时,这样的验证方式就
显得很不直观,尤其当计数器的位数增
加时(如百进制计数),太多的发光管
将使结果的读出非常困难。
数码管驱动方式

BCD码驱动
 直接驱动
输入
数码管
输出
D C B A
BCD 码驱动
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
D
CD
C
B
BA
A
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
Ya Yb Yc Yd Ye Yf Yg
1
0
1
1
0
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1
1
0
0
1
1
1
1
0
0
1
0
0
1
1
0
1
1
1
1
1
1
1
1
1
0
1
0
0
1
0
1
1
0
1
1
0
1
0
0
1
1
1
1
0
1
0
1
0
0
0
1
0
1
0
1
1
1
1
1
1
1
0
0
0
1
1
1
0
1
1
1
1
1
0
1
1
0
0
1
1
1
1
1
0
1
1
1
1
0
1
1
1
字形
0
1
2
3
4
5
6
7
8
9
A
b
C
d
E
F
数码管直接驱动
输入
abcdefg
输出字形
1111110
0110000
1101101
1111001
0110011
1011011
1011111
1110000
1111111
1111011
1110111
0011111
1001110
0111101
1001111
1000111
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
当采用直接驱动方式时,驱动一个数码管
需要七个电平信号,如果系统用来显示结果
的数码管较多,应考虑数字系统输出信号占
用PLD芯片管脚的问题,因为PLD芯片的管
脚总数是有限的,例如F10K10,它的管脚
总数是84,其中还有一些特定功能的管脚不
能给用户使用,能使用的管脚不到60个,所
以直接驱动时,必须设法减少占用PLD芯片
的管脚的数量。
解决的方法是采用动态扫描显示
北理工生产的实验箱,只能用动态扫描方式进行
数码管显示。
 硬件电路提供了一只3线-8线译码器,输入端为
sel2,sel1,sel0,输出接各个数码管片选端。

3线-8
线译码
器输入
端
例1-4-1

设计一个电路,使八个数码管依次同时
显示0、1、2、……A、B、…E、F。
module led(a,b,c,d,e,f,g,D);
例1-4-1
output a,b,c,d,e,f,g;
input[3:0] D;
reg a,b,c,d,e,f,g;
always
3
译码器
VCC
@(D)
74161
5
reset
INPUT
VCC
4
clk
INPUT
VCC
LDN
A
B
C
D
ENT
ENP
CLRN
case(D)
OUTPUT
16
OUTPUT
17
OUTPUT
18
QA
QB
QC
QD
RCO
sel0
sel1
sel2
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
a
b
c
VCC
D[3..0]
D[3..0] d
74161
6
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
CLK
COUNTER
LDN
A
B
C
D
ENT
ENP
CLRN
clk1
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
led
1
7
begin
INPUT
VCC
2
e
f
g
QA
QB
QC
QD
RCO
CLK
COUNTER
D0
D1
D2
D3
8
OUTPUT
9
OUTPUT
10
OUTPUT
11
OUTPUT
12
OUTPUT
13
OUTPUT
14
OUTPUT
15
a
b
c
d
e
f
g
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
endcase
end
endmodule
完全用Verilog HDL完成
北
京
理
工
实
验
箱
module
saomiaob(reset,clk,clk1,flag,a,b,c,d,e,f,g);
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
input clk,reset,clk1;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
reg [3:0] in1;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
output flag,a,b,c,d,e,f,g;
4'hA:{a,b,c,d,e,f,g}=7'b1110111;
reg a,b,c,d,e,f,g;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
reg[2:0] flag;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
always@(posedge clk)
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
begin
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
flag=flag+1;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
case(in1)
endcase
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
end
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
always@(posedge clk1)
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
begin if(!reset) in1=4'b0000;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
else begin in1=in1+1;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
end
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
end
endmodule
例1-4-2 设计一个电路,使两个数码管显示112的十二进
制计数,两个数码管显示059的六十进制计数。
注意:十二进制计数器自行设计
问题是要把两个计数器输出的个位和十位数分别显示在
不同的数码管上,用Selb模块实现。
原理是:in1,in2……in8为八个数码管的BCD码输入端数据,
sel[2..0]=000时,左边数码管(ms1)选中,in1送ms1;
sel[2..0]=001时,第二数码管(ms2)选中,in1送ms2;
……….
sel[2..0]=111时,第八数码管(ms8)选中,in1送ms8;
八组数据可以不全部都有,如此例中,十二进制数的低四位
送in1,高四位送in2,六十进制数的低四位送in3,高四位送in4,
其余数据端为空。
北
京
理
工
实
验
箱
module
selb(in1,in2,in3,in4,in5,in6,in7,in8,clk,flag,a,b,c,d,e,f,g);
input clk;
input [3:0] in1,in2,in3,in4,in5,in6,in7,in8;
output a,b,c,d,e,f,g;
output flag;
reg a,b,c,d,e,f,g;
reg [3:0] temp;
reg [2:0] flag;
always@(posedge clk)
begin
flag=flag+1;
case (flag)
0:begin temp=in1;end
1:begin temp=in2;end
2:begin temp=in3;end
3:begin temp=in4;end
4:begin temp=in5;end
5:begin temp=in6;end
6:begin temp=in7;end
7:begin temp=in8;end
endcase
case(temp)
4'd0:{a,b,c,d,e,f,g}=7'b1111110;
4'd1:{a,b,c,d,e,f,g}=7'b0110000;
4'd2:{a,b,c,d,e,f,g}=7'b1101101;
4'd3:{a,b,c,d,e,f,g}=7'b1111001;
4'd4:{a,b,c,d,e,f,g}=7'b0110011;
4'd5:{a,b,c,d,e,f,g}=7'b1011011;
4'd6:{a,b,c,d,e,f,g}=7'b1011111;
4'd7:{a,b,c,d,e,f,g}=7'b1110000;
4'd8:{a,b,c,d,e,f,g}=7'b1111111;
4'd9:{a,b,c,d,e,f,g}=7'b1111011;
/*4'hA:{a,b,c,d,e,f,g}=7'b1110111;
4'hB:{a,b,c,d,e,f,g}=7'b0011111;
4'hC:{a,b,c,d,e,f,g}=7'b1001110;
4'hD:{a,b,c,d,e,f,g}=7'b0111101;
4'hE:{a,b,c,d,e,f,g}=7'b1001111;
4'hF:{a,b,c,d,e,f,g}=7'b1000111;
*/
default:{a,b,c,d,e,f,g}=7'bzzzzzzz;
endcase
end
endmodule
End
设计要求

设计一个能进行时、分、秒计时的十二
小时制或二十四小时制的数字钟,并具
有定时与闹钟功能,能在设定的时间发
出闹铃音,能非常方便地对小时、分钟
和秒进行手动调节以校准时间,每逢整
点,产生报时音报时。
设计提示
主控电路
 计数器模块
 扫描显示

主控电路*
A、B:模式选择,AB=00为模式0,
AB=01为模式1,
AB=10为模式2,闹钟设置状态。
Turn:turn=0时,在手动校对时,
turn=1时,在手动校对时,选择调整小时部分。
Change:在手动校时或闹钟设置模式下,每按一次,计数器加1。
Reset:reset=0时,整个系统复位;
reset=1时,系统计时或其它特殊功能操作。
Reset1:reset1=0时,关闭闹铃信号;
reset1=1时,可对闹铃进行设置。
状态显示信号(发光管):
LD_alert:指示是否设置了闹铃功能;
LD_h:指示当前调整的是小时信号;
LD_m:指示当前调整的是分钟信号。
设计要求
设计一个能进行拔河游戏的电路。
 电路使用15个(或9个)发光二极管表示拔河的“电子
绳”,开机后只有中间一个发亮,此即拔河的中心点。
 游戏双方各持一个按钮,迅速地、不断地按动,产生
脉冲,谁按得快,亮点就向谁的方向移动,每按一次,
亮点移动一次。
 亮点移到任一方终端二极管时,这一方就获胜,此时
双方按钮均无作用,输出保持,只有复位后才使亮点
恢复到中心。
 由裁判下达比赛开始命令后,甲乙双方才能输入信号,
否则,输入信号无效。
 用数码管显示获胜者的盘数,每次比赛结束自动给获
胜方加分。

设计提示
加/减计数器
 译码器
 得分计数显示电路

设计要求
设计一个可容纳四组参賽的数字式抢答器,每组设一个
按钮供抢答使用。抢答器具有第一信号鉴别和锁存功能,
使除第一抢答者外的按钮不起作用;设置一个主持人
“复位”按钮,主持人复位后,开始抢答,第一信号鉴
别锁存电路得到信号后,用指示灯显示抢答组别,扬声
器发出23秒的音响。
*设置犯规电路,对提前抢答和超时答题(例如3分钟)
的组别鸣笛示警,并由组别显示电路显示出犯规组别。
设置一个计分电路,每组开始预置10分,由主持人
记分,答对一次加1分,答错一次减1分。
设计提示
鉴别锁存模块
 答题计时模块
 计分电路模块
 扫描显示模块

鉴别锁存模块

1.此模块的关键是准确判断出第一抢答者
并将其锁存,实现的方法可使用触发器或
锁存器,在得到第一信号后将输入封锁,
使其它组的抢答信号无效。
 2.形成第一抢答信号后,用编码、译码及
数码显示电路显示第一抢答者的组别,控
制扬声器发出音响,并启动答题计时电路。
洗衣机控制器
设计要求

设计一个洗衣机洗涤程序控制器,控制洗衣机
的电机作如下规律运转:

用两位数码管预置洗涤时间(分钟数),洗涤
过程在送入预置时间后开始运转,洗涤中按倒
计时方式对洗涤过程作计时显示,用LED表示
电机的正、反转,如果定时时间到,则停机并
发出音响信号。
设计提示
洗涤预置时间编码模块
 减法计数显示
 时序电路
 译码驱动模块

设计要求

1.设计一个能测量方波信号频率的频率计,测量结果
用十进制数显示。
 2. 测 量 的 频 率 范 围 是 110KHz , 分 成 两 个 频 段 , 即
1999Hz,1KHz10KHz,用三位数码管显示测量频率,
用LED显示表示单位,如亮绿灯表示Hz,亮红灯表示
KHz。
3.具有自动校验和测量两种功能,即能用标准时钟校验测
量精度。
4.具有超量程报警功能,在超出目前量程档的测量范围时,
发出灯光和音响信号。
设计提示

脉冲信号的频率就是在单位时间内所产生的脉冲个数,其表达式
为f=N/T,f为被测信号的频率,N为计数器所累计的脉冲个数,T
为产生N个脉冲所需的时间。所以,在1秒时间内计数器所记录的
结果,就是被测信号的频率。

测量/校验选择模块*
计数器模块
送存选择报警模块
锁存模块
扫描显示模块




测量/校验选择模块*
输入信号:选择信号selet
被测信号meas
测试信号test
输出信号:CP1
当selet=0时,为测量状态,CP1=meas;
当selet=1时,为校验状态,CP1=test。
校验与测量共用一个电路,只是被测信号CP1不同而已。

设置1秒定时信号(周期为2秒),在1秒定时
时间内的所有被测信号送计数器输入端。

计数器对CP1 信号进行计数,在1秒定时结束
后,将计数器结果送锁存器锁存,同时将计
数器清零,为下一次采样测量做好准备。
设置量程档控制开关K,单位显示信号Y,当
K=0时,为1999Hz量程档,数码管显示的数
值为被测信号频率值,Y显示绿色,即单位为
Hz;
当K=1时,为1KHz10KHz量程档,被测信号频
率值为数码管显示的数值乘1000,Y显示红色,
即单位为KHz。


设置超出量程档测量范围示警信号alert。计数
器由四级十进制计数构成(带进位C)。若被
测信号频率小于1KHz(K=0),则计数器只进
行三级十进制计数,最大显示值为999.Hz,如
果被测信号频率超过此范围,示警信号驱动灯
光、扬声器报警;若被测信号为1KHz10KHz
(K=1),计数器进行四位十进制计数,取高
三位显示,最大显示值为9.99KHz,如果被测
信号频率超过此范围,报警。
左第一位
左第一位
设计要求

设计一个电子密码锁,在锁开的状态下输入密码,密码
共4位,用数据开关K1K10分别代表数字1、2、…、9、
0,输入的密码用数码管显示,最后输入的密码显示在最
右边的数码管上,即每输入一位数,密码在数码管上的
显示左移一位。可删除输入的数字,删除的是最后输入
的数字,每删除一位,密码在数码管的显示右移一位,
并在左边空出的位上补充“0”。用一位输出电平的状态
代表锁的开闭状态。为保证密码锁主人能打开密码锁,
设置一个万能密码,在主人忘记密码时使用。
设计提示
密码输入删除控制模块
 寄存模块
 比较模块
 扫描显示 模块

脉冲按键电话按键显示器
设计要求
设计一个具有7位显示的电话按键显示器,
显示器应能正确反映按键数字,显示器
显示从低位向高位前移,逐位显示按键
数字,最低位为当前显示位,七位数字
输入完毕后,电话接通,扬声器发出
“嘟——嘟”接通声响,直到有接听信
号输入,若一直没有接听,10秒钟后,
自动挂断,显示器清除显示,扬声器停
止,直到有新号码输入。
设计提示
号码输入显示控制模块
 主控制模块
 扫描显示模块

任务与要求






设计一个由甲、乙双方参赛,有裁判的3人乒乓球游戏机。
用8个(或更多个)LED排成一条直线,以中点为界,两边各代表参
赛双方的位置,其中一只点亮的LED指示球的当前位置,点亮的
LED依此从左到右,或从右到左,其移动的速度应能调节。
当“球”(点亮的那只LED)运动到某方的最后一位时,参赛者应
能果断地按下位于自己一方的按钮开关,即表示启动球拍击球。
若击中,则球向相反方向移动;若未击中,则对方得1分。
一方得分时,电路自动响铃3秒,这期间发球无效,等铃声停止后
方能继续比赛。
设置自动记分电路,甲、乙双方各用2位数码管进行记分显示,每
计满21分为1局。
甲、乙双方各设一个发光二极管,表示拥有发球权,每隔5次自动
交换发球权,拥有发球权的一方发球才有效。
设计思路




用双向移位寄存器的输出端控制LED显示来模拟乒乓
球运动的轨迹,先点亮位于某一方的第1个LED,由击
球者通过按钮输入开关信号,实现移位方向的控制。
也可用计数译码方式实现乒乓球运动轨迹的模拟,如
利用加/减计数器的2个时钟信号实现甲、乙双方的击
球,由表示球拍的按钮产生计数时钟,计数器的输出
状态经译码驱动LED发亮。
任何时刻都保持一个LED发亮,若发亮的LED运动到
对方的终点,但对方未能及时输入信号使其向相反方
向移动,即失去1分。
控制电路决定整个系统的协调动作,必须严格掌握各
信号之间的关系。
任务与要求





设计一个交通信号灯控制器,由一条主干道和一条支干道汇合成
十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁
止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在
禁行线外。
用红、绿、黄发光二极管作信号灯,用传感器或逻辑开关作检测
车辆是否到来的信号。
主干道处于常允许通行的状态,支干道有车来时才允许通行。主
干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。
主、支干道均有车时,两者交替允许通行,主干道每次放行45秒,
支干道每次放行25秒,设立45秒、25秒计时、显示电路。
在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡,
使行驶中的车辆有时间停到禁行线外,设立5秒计时、显示电路。
设计思路
主、支干道用传感器检测车辆到来情况,
实验电路用逻辑开关代替。
 45秒、25秒、5秒定时信号可用顺计时,
也可用倒计时,计时起始信号由主控电
路给出,定时结束信号也输入到主控电
路,由主控电路启、闭三色信号灯或启
动另一计时电路。

设计思路









主控电路是核心,这是一个时序电路,其输入信号为:
(1) 车辆检测信号(A,B);
(2) 45秒、25秒、5秒定时信号(C,D,E)。
其状态表为:
状态
主干道
支干道
时间
0
绿灯亮,允许通行 红灯亮,禁止通行 45秒
1
黄灯亮,停车
红灯亮,禁止通行 5秒
2
红灯亮,禁止通行 绿灯亮,允许通行 25秒
3
红灯亮,禁止通行 黄灯亮,停车
5秒
具体设计
时钟产生电路产生1HZ系统时钟。
 主控电路由两个JK触发器和逻辑门构成,其输
出经译码后,控制主干道三色灯R、G、Y和支
干道三色灯r、g、y。
 三个定时器分别产生45秒、25秒、5秒定时信
号,电路都是计数器,并受主控电路和来自主、
支干道车辆信号控制,每当计满所需时间,即
向主控电路输出“时间到”信号,并使计数器
清零。

设:
A:主干道车辆情况,有车为“1”,无车为“0”
B:支干道车辆情况,有车为“1”,无车为“0”
C:45秒定时信号,45秒定时已到为“1”,45秒定时未到为“0”
D:25秒定时信号,25秒定时已到为“1”,25秒定时未到为“0”
E:5秒定时信号,5秒定时已到为“1”,5秒定时未到为“0”
S0
E=0
BAC=0
E=1
BAC=1
S3
S1
E=1
BAD=0
S2
BAD=1
E=0
状态编码:
S0=00 S1=01
S2=11 S3=10
若选JK触发器,其输出为Q2 Q1
则状态表为:
A B C D E Q2n Q1n Q2n+1 Q1n+1
x 0 x x x
0
0
0
0
1 1 0 x x
0
0
0
0
0 1 x x x
0
0
0
1
1 1 1x x
0
0
0
1
x x x x 0
0
1
0
1 维持S1
x x x x 1
0
1
1
1 由S1——S2
1 1 x 0 x
1
1
1
1
0 1 x x x
1
1
1
1
x 0 x x x
1
1
1
0 由S2——S3
x x x x0
1 0
1
0 维持S3
x x x x x
1
0
0 由S3——S0
0
维持S0
45秒定时
由S0——S1
维持S2
5秒定时
25秒定时
5秒定时
从状态表得状态方程
Q2
Q1
n1
n1
 Q2 EQ1  (Q1  E )Q2
n
n
n
n
 Q1 Q2 B( A  C)  Q1 [Q2  B( A  D )]
n
n
得触发器驱动方程:
J1  Q2 B( A  C)
n
K1  Q2  B( A  D )
n
J 2  EQ1
n
K 2  Q1  E
n
n
n
45S、25S、5S定时器CP脉冲驱动方程
CP45  [Q2Q1 ( A  B )  Q2Q1 E]CP脉冲
CP25  [Q2Q1 B  Q2Q1 E]CP脉冲
CP5  [Q1  Q2 ]CP脉冲
则主控电路和各定时电路如图1-5-3所示
计数器驱动脉冲如图1-5-4所示
译码驱动电路真值表
译码驱动电路如图1-5-5所示
此例也可以完全由Verilog HDL文件完成
具有四种信号灯的交通灯控制器

设计一个具有四种信号灯的交通灯控制器。设
计要求是:由一条主干道和一条支干道汇合成
十字路口,在每个入口处设置红、绿、黄、左
拐允许四盏信号灯,红灯亮禁止通行,绿灯亮
允许通行,黄灯亮则给行驶中的车辆有时间停
在禁行线外,左拐灯亮允许车辆向左拐弯。信
号灯变换次序为:主支干道交替允许通行,主
干道每次放行40S,亮5S红灯让行驶中的车辆
有时间停到禁行线外,左拐放行15秒,亮5S红
灯;支干道放行30S,亮5S黄灯,左拐放行15
秒,亮5S红灯……。各计时电路为倒计时显示。
系统框图如图4-7-1所示
彩灯控制器
任务与要求
设计一个彩灯控制器,使彩灯(LED管)
能连续发出四种以上不同的显示形式;
 随着彩灯显示图案的变化,发出不同的
音响声。

总体设计方案
彩灯显示的不同形式可由不同进制计数
器驱动LED显示完成;
 音响由不同频率CP脉冲驱动扬声器形成。

简易电子琴
任务与要求
设计一个简易电子琴;
 利用实验箱的脉冲源产生1,2,3,。。。
共7个或14个音阶信号;
 用指示灯显示节拍;
 *能产生颤音效果;

出租车自动计费器
任务与要求
设计一个出租车自动计费器,具有行车
里程计费、等候时间计费、及起价三部
分,用四位数码管显示总金额,最大值
为99。99元;
 行车里程单价1元/公里,等候时间单价0。
5元/10分钟,起价3元(3公里起价)均能
通过人工输入。

总体设计方案
行车里程的计费电路将汽车行驶的里程数转换
成与之成正比的脉冲数,然后由计数译码电路
转换成收费金额,实验中以一个脉冲模拟汽车
前进十米,则每100个脉冲表示1公里,然后用
BCD码比例乘法器将里程脉冲乘以每公里单价
的比例系数,比例系数可由开关预置。例如单
价是1。0元/公里,则脉冲当量为0。01元/脉冲。
 用LED显示行驶公里数,两个数码管显示收费
金额。

总体设计方案
等候时间计费需将等候时间转换成脉冲个数,
用每个脉冲表示的金额与脉冲数相乘即得计费
数,例如100个脉冲表示10分钟,而10分钟收
费0。5元,则脉冲当量为0。05元/脉冲,如果
将脉冲当量设置成与行车里程计费相同(0。
01元/脉冲),则10分钟内的脉冲数应为500个。
 用LED显示等候时间,两个数码管表示等候时
间收费金额。

总体设计方案
用加法器将几项收费相加,P=P1+P2+P3,
 P1为起价,P2为行车里程计费,P3为等
候时间计费,用两个数码管表示结果。
