基于CPLD的数字钟设计(一)
2006-04-27 16:03
483 查看
在“夏宇闻老师之verilog学习站”(http://verilog.113.tofor.com)中,有这样一道题目。
设计要求如下:
基于CPLD的数字钟设计
设计任务:
1、 设计一个具有时、分、秒计时,6位数字显示的时钟电路;
2、 具有快速校时功能;
3、 具有整点音响自动报时;
4、 以时钟电路为基础,设计如下表所示的作息时间自动打铃器;
表:自动打铃的作息时间
时间 作用
6:00 起床
7:50 上班预备
8:00 上班
9:30 工间操
12:00 下班
2:30 下午上班
5:30 下午下班
5、 以时钟电路为基础设计一个工业顺序控制器,用LED发光管的亮与灭模拟执行机构的动作,实现要求的工艺过程。
设计要求:
1、 按自顶向下的设计方法,画出系统实现框图。
2、 按模块化方法进行设计,在适当的地方给出注释。
3、 给出系统实现的完整程序或电路原理图,利用仿真手段进行功能调试,给出系统仿真波形图,下载到实验板,进行实际验证
借来练习一下:
可以看出,本题目的关键设计在一个可校正的时钟。其它均为外部设计,较为简单。故现只设计这一部分。
首先,作为数字钟的设计,即涉及到计数器:
秒表:模60计数器;
分表:模60计数器;
时表:模24计数器;
将模60计数器分成模6和模10;
将模24计数器分成模6和模4;
其次,校时功能如何实现呢?设置两个Function Key:Fm_key和Fh_key; Fm_key用来校正分表;Fh_key用来校正时表。
模块框图如下:
时钟正常运行时,分计数器以秒计数器的进位信号为clk, 时计数器以分计数器的进位信号为clk;
[align=left]校时时,若Fm_key为1,则将CLK_1HZ送至分计数器作CLK,可实现分表调整;[/align]
[align=left] 若Fh_key为1,则将CLK_1HZ送至时计数器作CLK,可实现时表调整;[/align]
[align=left] [/align]
[align=left]第一次编码:[/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: clock.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Clock: 1hz[/align]
[align=left] Reset: Synchronous,Low[/align]
[align=left] include: counter60.v[/align]
[align=left] counter24.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter, Digital Clock[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter60.v"[/align]
[align=left]`include "counter24.v"[/align]
[align=left] [/align]
[align=left]module clock(clk,[/align]
[align=left] fm_key,[/align]
[align=left] fh_key2,[/align]
[align=left] reset,[/align]
[align=left] h,[/align]
[align=left] m,[/align]
[align=left] s);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input f_key1;[/align]
[align=left]input f_key2;[/align]
[align=left]input reset;[/align]
[align=left]output [6:0] h;[/align]
[align=left]output [6:0] m;[/align]
[align=left]output [6:0] s;[/align]
[align=left] [/align]
[align=left]reg [6:0] h;[/align]
[align=left]reg [6:0] m;[/align]
[align=left]reg [6:0] s;[/align]
[align=left] [/align]
[align=left]wire clk_m;[/align]
[align=left]wire clk_h;[/align]
[align=left] [/align]
[align=left]wire cout_s;[/align]
[align=left]wire cout_m;[/align]
[align=left]wire cout_h;[/align]
[align=left] [/align]
[align=left]counter60 counters (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_s),[/align]
[align=left] .out(s));[/align]
[align=left] [/align]
[align=left]counter60 counterm (.clk(clkm),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_m),[/align]
[align=left] .out(m));[/align]
[align=left] [/align]
[align=left]counter24 counterh (.clk(clkh),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_h),[/align]
[align=left] .out(h));[/align]
[align=left] [/align]
[align=left]//---- clock for minute counter ------[/align]
[align=left]if(fm_key)[/align]
[align=left] clkm = clk;[/align]
[align=left]else[/align]
[align=left] clkm = cout_s;[/align]
[align=left] [/align]
[align=left]//---- clock for hour counter --------[/align]
[align=left]if(fh_key)[/align]
[align=left] clkh = clk;[/align]
[align=left]else[/align]
[align=left] clkh = cout_m; [/align]
[align=left] [/align]
[align=left]endmoudle[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter60.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] include: counter6.v[/align]
[align=left] counter10.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter6.v"[/align]
[align=left]`include "counter10.v"[/align]
[align=left] [/align]
[align=left]module counter60(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out);[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [6:0] out;[/align]
[align=left] [/align]
[align=left]wire cout_6;[/align]
[align=left]wire cout_10;[/align]
[align=left]wire [2:0] out_6;[/align]
[align=left]wire [3:0] out_10;[/align]
[align=left] [/align]
[align=left]counter6 counter6 (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_6),[/align]
[align=left] .out(out_6));[/align]
[align=left]counter10 counter10(.clk(cout_6),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout),[/align]
[align=left] .out(out_10));[/align]
[align=left] [/align]
[align=left]assign out = {out_6,out_10};[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter24.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] include: counter6.v[/align]
[align=left] counter4.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter6.v"[/align]
[align=left]`include "counter4.v"[/align]
[align=left] [/align]
[align=left]module counter24(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out);[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [4:0] out;[/align]
[align=left] [/align]
[align=left]wire cout_6;[/align]
[align=left]wire cout_4;[/align]
[align=left]wire [2:0] out_6;[/align]
[align=left]wire [1:0] out_4;[/align]
[align=left] [/align]
[align=left]counter6 counter6 (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_6),[/align]
[align=left] .out(out_6));[/align]
[align=left]counter10 counter4v(.clk(cout_6),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout),[/align]
[align=left] .out(out_4));[/align]
[align=left] [/align]
[align=left]assign out = {out_6,out_4};[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter6.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter6(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [2:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [2:0] out; [/align]
[align=left] [/align]
[align=left]reg [2:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<6)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter10.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter6(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [3:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [3:0] out;[/align]
[align=left] [/align]
[align=left]reg [3:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<10)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter4.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter4(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [1:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [1:0] out;[/align]
[align=left] [/align]
[align=left]reg [1:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<4)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]编译结果:[/align]
[align=left]==ècounter6.v/counter4.v/counter10.v:[/align]
[align=left]1. 红色部分[N:0]掉了,编译通过了,功能仿真时报Pin不匹配;coding style;[/align]
[align=left]2. 红色always块中的for语句错误,后改成:[/align]
[align=left]always@(posedge clk)[/align]
[align=left]if(!reset)[/align]
[align=left] out <= 0;[/align]
[align=left]else[/align]
[align=left] for(counter=1;counter<n;counter=counter+1)[/align]
[align=left] out <= counter;[/align]
[align=left]==èclock.v:[/align]
[align=left]1. 上面的红色部分出错,编译错误说明是if的判断语句必须为一个确定的值,由于Fm_key和Fh_key并没有初始化,故此处错误。后单独写了一个选择器代替。[/align]
[align=left]2. 褐色部分好像不要也是可以的。但要着也不会出错。[/align]
设计要求如下:
基于CPLD的数字钟设计
设计任务:
1、 设计一个具有时、分、秒计时,6位数字显示的时钟电路;
2、 具有快速校时功能;
3、 具有整点音响自动报时;
4、 以时钟电路为基础,设计如下表所示的作息时间自动打铃器;
表:自动打铃的作息时间
时间 作用
6:00 起床
7:50 上班预备
8:00 上班
9:30 工间操
12:00 下班
2:30 下午上班
5:30 下午下班
5、 以时钟电路为基础设计一个工业顺序控制器,用LED发光管的亮与灭模拟执行机构的动作,实现要求的工艺过程。
设计要求:
1、 按自顶向下的设计方法,画出系统实现框图。
2、 按模块化方法进行设计,在适当的地方给出注释。
3、 给出系统实现的完整程序或电路原理图,利用仿真手段进行功能调试,给出系统仿真波形图,下载到实验板,进行实际验证
借来练习一下:
可以看出,本题目的关键设计在一个可校正的时钟。其它均为外部设计,较为简单。故现只设计这一部分。
首先,作为数字钟的设计,即涉及到计数器:
秒表:模60计数器;
分表:模60计数器;
时表:模24计数器;
将模60计数器分成模6和模10;
将模24计数器分成模6和模4;
其次,校时功能如何实现呢?设置两个Function Key:Fm_key和Fh_key; Fm_key用来校正分表;Fh_key用来校正时表。
模块框图如下:
时钟正常运行时,分计数器以秒计数器的进位信号为clk, 时计数器以分计数器的进位信号为clk;
[align=left]校时时,若Fm_key为1,则将CLK_1HZ送至分计数器作CLK,可实现分表调整;[/align]
[align=left] 若Fh_key为1,则将CLK_1HZ送至时计数器作CLK,可实现时表调整;[/align]
[align=left] [/align]
[align=left]第一次编码:[/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: clock.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Clock: 1hz[/align]
[align=left] Reset: Synchronous,Low[/align]
[align=left] include: counter60.v[/align]
[align=left] counter24.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter, Digital Clock[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter60.v"[/align]
[align=left]`include "counter24.v"[/align]
[align=left] [/align]
[align=left]module clock(clk,[/align]
[align=left] fm_key,[/align]
[align=left] fh_key2,[/align]
[align=left] reset,[/align]
[align=left] h,[/align]
[align=left] m,[/align]
[align=left] s);[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input f_key1;[/align]
[align=left]input f_key2;[/align]
[align=left]input reset;[/align]
[align=left]output [6:0] h;[/align]
[align=left]output [6:0] m;[/align]
[align=left]output [6:0] s;[/align]
[align=left] [/align]
[align=left]reg [6:0] h;[/align]
[align=left]reg [6:0] m;[/align]
[align=left]reg [6:0] s;[/align]
[align=left] [/align]
[align=left]wire clk_m;[/align]
[align=left]wire clk_h;[/align]
[align=left] [/align]
[align=left]wire cout_s;[/align]
[align=left]wire cout_m;[/align]
[align=left]wire cout_h;[/align]
[align=left] [/align]
[align=left]counter60 counters (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_s),[/align]
[align=left] .out(s));[/align]
[align=left] [/align]
[align=left]counter60 counterm (.clk(clkm),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_m),[/align]
[align=left] .out(m));[/align]
[align=left] [/align]
[align=left]counter24 counterh (.clk(clkh),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_h),[/align]
[align=left] .out(h));[/align]
[align=left] [/align]
[align=left]//---- clock for minute counter ------[/align]
[align=left]if(fm_key)[/align]
[align=left] clkm = clk;[/align]
[align=left]else[/align]
[align=left] clkm = cout_s;[/align]
[align=left] [/align]
[align=left]//---- clock for hour counter --------[/align]
[align=left]if(fh_key)[/align]
[align=left] clkh = clk;[/align]
[align=left]else[/align]
[align=left] clkh = cout_m; [/align]
[align=left] [/align]
[align=left]endmoudle[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter60.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] include: counter6.v[/align]
[align=left] counter10.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter6.v"[/align]
[align=left]`include "counter10.v"[/align]
[align=left] [/align]
[align=left]module counter60(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out);[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [6:0] out;[/align]
[align=left] [/align]
[align=left]wire cout_6;[/align]
[align=left]wire cout_10;[/align]
[align=left]wire [2:0] out_6;[/align]
[align=left]wire [3:0] out_10;[/align]
[align=left] [/align]
[align=left]counter6 counter6 (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_6),[/align]
[align=left] .out(out_6));[/align]
[align=left]counter10 counter10(.clk(cout_6),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout),[/align]
[align=left] .out(out_10));[/align]
[align=left] [/align]
[align=left]assign out = {out_6,out_10};[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter24.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] include: counter6.v[/align]
[align=left] counter4.v[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left]`include "counter6.v"[/align]
[align=left]`include "counter4.v"[/align]
[align=left] [/align]
[align=left]module counter24(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out);[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [4:0] out;[/align]
[align=left] [/align]
[align=left]wire cout_6;[/align]
[align=left]wire cout_4;[/align]
[align=left]wire [2:0] out_6;[/align]
[align=left]wire [1:0] out_4;[/align]
[align=left] [/align]
[align=left]counter6 counter6 (.clk(clk),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout_6),[/align]
[align=left] .out(out_6));[/align]
[align=left]counter10 counter4v(.clk(cout_6),[/align]
[align=left] .reset(reset),[/align]
[align=left] .cout(cout),[/align]
[align=left] .out(out_4));[/align]
[align=left] [/align]
[align=left]assign out = {out_6,out_4};[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter6.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter6(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [2:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [2:0] out; [/align]
[align=left] [/align]
[align=left]reg [2:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<6)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter10.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter6(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [3:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [3:0] out;[/align]
[align=left] [/align]
[align=left]reg [3:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<10)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]/*+FHDR--------------------------------------------------------[/align]
[align=left] file name: counter4.v[/align]
[align=left] Author: Clarke.Lee[/align]
[align=left] E-mail: clarke.lee@163.com[/align]
[align=left] --------------------------------------[/align]
[align=left] Keywords: Counter[/align]
[align=left]//-FHDR---------------------------------------------------------*/ [/align]
[align=left] [/align]
[align=left]`timescale 1ns/1ns[/align]
[align=left] [/align]
[align=left]module counter4(clk,[/align]
[align=left] reset,[/align]
[align=left] cout,[/align]
[align=left] out)[/align]
[align=left] [/align]
[align=left]input clk;[/align]
[align=left]input reset;[/align]
[align=left]output cout;[/align]
[align=left]output [1:0] out;[/align]
[align=left] [/align]
[align=left]reg cout;[/align]
[align=left]reg [1:0] out;[/align]
[align=left] [/align]
[align=left]reg [1:0] counter;[/align]
[align=left] [/align]
[align=left]always@(posedge clk)[/align]
[align=left] if(!reset)[/align]
[align=left] counter <= 0;[/align]
[align=left] else[/align]
[align=left] for(;counter++;counter<4)[/align]
[align=left] out <= counter;[/align]
[align=left] [/align]
[align=left]endmodule[/align]
[align=left] [/align]
[align=left]编译结果:[/align]
[align=left]==ècounter6.v/counter4.v/counter10.v:[/align]
[align=left]1. 红色部分[N:0]掉了,编译通过了,功能仿真时报Pin不匹配;coding style;[/align]
[align=left]2. 红色always块中的for语句错误,后改成:[/align]
[align=left]always@(posedge clk)[/align]
[align=left]if(!reset)[/align]
[align=left] out <= 0;[/align]
[align=left]else[/align]
[align=left] for(counter=1;counter<n;counter=counter+1)[/align]
[align=left] out <= counter;[/align]
[align=left]==èclock.v:[/align]
[align=left]1. 上面的红色部分出错,编译错误说明是if的判断语句必须为一个确定的值,由于Fm_key和Fh_key并没有初始化,故此处错误。后单独写了一个选择器代替。[/align]
[align=left]2. 褐色部分好像不要也是可以的。但要着也不会出错。[/align]
相关文章推荐
- 基于CPLD的数字钟设计(二)
- 基于Quartus II 的FPGA/CPLD数字系统设计与应用(原理图编辑)
- [论文学习]2014.04.28基于CPLD的LCOS场序彩色视频控制器设计
- 基于达芬奇技术的数字视频系统设计与实现
- 基于matlab的数字陷波器设计
- 基于FPGA/CPLD设计与实现UART(VHDL)
- 基于CPLD和LVPECL门电路的脉宽可调窄脉冲信号发生器设计
- DE2-70数字系统设计(4)--基于Nios的LCD显示
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于信号完整性分析的高速数字PCB 的设计方法
- 基于basys2用verilog设计多功能数字钟(重写)
- 基于USB2.0的高分辨率数字摄像头设计
- 基于图像传感器的CPLD视觉系统设计
- 基于DVB-SI的数字有线电视机顶盒节目指南的设计实现
- 基于FPGA的数字秒表的设计
- 设计题目:基于CPLD/FPGA的出租车计费器
- 基于FPGA/CPLD设计与实现UART
- 基于至简设计法的数字时钟设计
- 基于单片机和CPLD的高精度数据采集系统设计
- 基于matlab的数字图像处理GUI设计