verilog hdl 十进制计算

合集下载

VerilogHDL十进制计数器实验Quartus非常详细的步骤

VerilogHDL十进制计数器实验Quartus非常详细的步骤

实验二十进制计数器实验该实验将使用Verilog 硬件描述语言在DE2-70 开发平台上设计一个基本时序逻辑电路——1 位十进制计数器。

通过这个实验,读者可以了解使用Quartus 工具设计硬件的基本流程以及使用Quartus II 内置的工具进行仿真的基本方法和使用SignalTap II 实际观察电路运行输出情况。

SignalTap II 是Quartus 工具的一个组件,是一个片上的逻辑分析仪,可以通过JTAG 电缆将电路运行的实际输出传回Quartus 进行观察,从而省去了外界逻辑分析仪时的很多麻烦。

实验步骤3.1建立工程并完成硬件描述设计1. 打开Quartus II 工作环境,如图3-1 所示。

图3-1 Quartus II工作环境界面2. 点击菜单项File->New Project Wizard 帮助新建工程。

参看图3-2。

图3-2 选择New Project Wizard打开Wizard 之后,界面如图3-3 所示。

点击Next,如图3-3。

第23 页共208 页图3-3 New Project Wizard界面3. 输入工程工作路径、工程文件名以及顶层实体名。

这次实验会帮助读者理解顶层实体名和工程名的关系,记住目前指定的工程名与顶层实体名都是Counter10,输入结束后,如图3-4 所示。

点击Next。

图3-4输入设计工程信息4. 添加设计文件。

界面如图3-5 所示。

如果用户之前已经有设计文件(比如.v 文件)。

第24 页共208 页那么再次添加相应文件,如果没有完成的设计文件,点击Next 之后添加并且编辑设计文件。

图3-5添加设计文件5. 选择设计所用器件。

由于本次实验使用Altera 公司提供的DE2-70 开发板,用户必须选择与DE2-70 开发板相对应的FPGA 器件型号。

在Family 菜单中选择Cyclone II,Package 选FBGA,Pin Count 选896,Speed grade 选6,确认Available devices 中选中EP2C70F896C6,如图3-6。

FPGA实验二:基于HDL的十进制计数器

FPGA实验二:基于HDL的十进制计数器

《FPGA》课程报告设计题目:基于HDL的十进制计数器学生班级:学生学号:学生姓名:指导教师:时间:成绩:一、实验目的:1.掌握基于语言的ISE设计全流程;2.熟悉、应用VerilogHDL描述数字电路;3.掌握基于Verilog的组合和时序逻辑电路的设计方法。

二、实验原理:本次实验是使用Verilog HDL进行编写十进制计数器与显示器代码而进行的实验,实验原理图如下:本次实验的内容包括十进制计数器模块,七段译码显示器模块,以及消抖模块。

十进制计数器:对输入时钟进行计数输入:CLK -------待计数的时钟CLR ---------异步清零信号,当CLR =1,输出复位为0,当CLR =0,正常计数ENA---------使能控制信号,当ENA=1,电路正常累加计数,否则电路不工作输出:SUM[3:0]---------- 计数值的个位。

即,在CLK上升沿检测到SUM=9时,SUM将被置0,开始新一轮的计数。

COUT ------------计数值的十位进位,即:只有在时钟CLK上升沿检测到SUM=9时,COUT将被置1,其余情况下COUT=0;LED显示驱动模块:输入:sum[3:0] -------待显示的数值out[6:0] ----------驱动数码管的七位数值七段数码管的字符显示真值表如下:消抖模块:三、实验过程:1.首先建立一个新的工程,添加一个新的Verilog Module,在其中编写十进制计数模块的代码,如下:module liao1(CLR,CLK,ENA,SUM,COUT);input CLR,CLK,ENA;output[3:0] SUM;output COUT;reg[3:0] SUM;reg COUT;always@(posedge CLK or posedge CLR)if(CLR)beginSUM<=4'b0000;COUT<=1'b0;endelseif(ENA)beginif(SUM==9)beginSUM<=4'b0000;COUT<=1'b1;endelsebeginSUM<=SUM+1'b1;COUT<=1'b0;endendendmodule然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:2.再新建一个Verilog Module,在其中编写七段数码显示模块的代码,如下:module liao2(SUM,out);input[3:0] SUM;output[6:0] out;reg [6:0] out;always @(SUM)begincase(SUM)4'b0000: out<=7'b0000001;4'b0001: out<=7'b1001111;4'b0010: out<=7'b0010010;4'b0011: out<=7'b0000110;4'b0100: out<=7'b1001100;4'b0101: out<=7'b0100100;4'b0110: out<=7'b0100000;4'b0111: out<=7'b0001111;4'b1000: out<=7'b0000000;4'b1001: out<=7'b0000100;default :out<=7'b0000001;endcaseendendmodule执行综合,确认无误后新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:3.添加消抖模块,然后再新建一个Verilog Module,编写例化文件,制成顶层文件,其例化文件代码如下:module liao(CLK_50M,CLK,CLR,ENA,COUT,out);input CLR,CLK,ENA;input CLK_50M;output[6:0] out;output COUT;wire[3:0] SUM;debounce_module u1(CLK_50M,CLR,CLK,clk_out);liao1 u2(CLR,clk_out,ENA,SUM,COUT);liao2 u3(SUM,out);endmodule保存之后形成顶层文件:4.执行综合,确认无误后,根据实验指导书进行锁引脚操作:锁引脚完成后,修改、编辑约束文件:5.生成下载配置文件,下载到开发板进行经行验证。

Verilog10进制计数器电路

Verilog10进制计数器电路

练习设计一个10进制计数器电路,把10进制计数器的计数结果送到一位数码管显示,要求计数器的计数频率为1Hz。

系统时钟为25MHz,要求系统同步复位,高电平有效。

完成电路设计框图,各模块仿真以及系统功能仿真和下载编程。

分频器:module fenpin25(clk,rst,clk_1hz);input clk;input rst;output clk_1hz;reg clk_1hz;reg [23:0] cnt;always@(posedge clk or posedge rst)beginif(rst==1'b1)cnt<=24'd0;else if(cnt==13107119)begincnt<=24'd0;clk_1hz<=~clk_1hz;endelsecnt<=cnt+1;endendmodule十进制计数器:module cnt10(rst,clk,cnt);input rst,clk;output [3:0] c nt;reg [3:0] c nt;always@(posedge clk)beginif(rst==1'b0)cnt<=4'b000;else if(cnt==4'd9)cnt<=4'b000;elsecnt<=cnt+1;endendmodule十进制计数器仿真波形图:LED译码器:module qiduan(cnt,led,scan); input [3:0] c nt;output [6:0] l ed;output [3:0] s can;reg [6:0] l ed;wire [3:0] s can;assign scan=4'b0001;always@(cnt)begincase(cnt)4'b0001:led=7'b0000110;4'b0010:led=7'b1011011;4'b0011:led=7'b1001111;4'b0100:led=7'b1100110;4'b0101:led=7'b1101101;4'b0110:led=7'b1111100;4'b0111:led=7'b0000111;4'b1000:led=7'b1111111;4'b1001:led=7'b1101111;4'b1010:led=7'b1110111;default:led=7'b0111111;endcaseendendmoduleLED译码器仿真波形图:顶层电路Verilog HDL代码:module cnt10led(rst,clk,led,scan);input rst;input clk;output [6:0] l ed;output [3:0] s can;wire [3:0] c nt;wire [6:0] l ed;wire [3:0] s can;fenpin25 u0(.clk(clk),.rst(rst),.clk_1hz(clk_1hz)); cnt10 u1(.clk(clk_1hz),.rst(rst),.cnt(cnt)); qiduan u2(.cnt(cnt),.led(led),.scan(scan));endmodule框图:。

Verilog_HDL十进制计数器实验Quartus90非常详细的步骤

Verilog_HDL十进制计数器实验Quartus90非常详细的步骤

页 802 共 页 73 第 图击点、noitalipmoc trats>-gnissecorP 项单菜击点。件文译编全�后配分脚引成完 .22 。制控动手关开用使�波方频低出输接直法办有没板发开 07_2ED�关相 kcolc�意注 图脚引配分 63-3 图
绿个
。42V 是不 42Y 意注�63-3 图考参�一验实考 参�。]0[WS 关开接 klc�]0[YEK 接 n_tsr�]4[GDEL 接 wolfrevo �上�]0[GDEL-]3[GDEL� DEL 4 的板发开 07-2ED 到置配出输 q 的器数计将�册手导指户用 07-2ED 的供 提所据根。作操的脚引配分行进以可�后确正能功认确�后成完真仿。脚引置配 .12 果结真仿 53-3 图
为设制强 标图侧左击单�号信 n_tsr 中选。平电高续持后 sn02 低成改 n_tsr 将 .61
置设期周的钟时 72-3 图
。率比间时的占所内之期周个一在平电高指是即�比 空占是思意的 elcyc ytuD。72-3 图如�sn02 为整调期周把中框话对定设 kcolc 的出弹在 波方为改 klci 将 62-3 图
。件文计设辑编且并加添后之 txeN 击点�件文计设的成完有没果如�件文应相加添次再么那 验实器数计制进十 二验实
页 802 共 页 62 第 正户用现出会中栏签标 yhcrareiH 的 rotagivaN tcejorP 中面界 II sutrauQ�后建新成完在 结总程工建新 8-3 图
。建新成完 hsiniF 击点后认确�示所 8-3 图如�计设的前之对 核户用让结总个一成生动自会 II sutrauQ�后成完计设本基在。结总程工建新看查 .7 具工 ADE 置设 7-3 图
验实器数计制进十 二验实

verilog HDL十进制加减法计数器报告

verilog HDL十进制加减法计数器报告

十进制加减法计数器1.实验要求(1)在Modelsim环境中编写十进制加减法计数器程序;(2)编译无误后编写配套的测试程序;(3)仿真后添加信号,观察输出结果。

2.设计程序如下module decade_counter#(parameter SIZE=4)(input clock,load_n,clear_n,updown,input [SIZE-1:0]load_data,output reg [SIZE-1:0]q);always@(negedge load_n,negedge clear_n,posedge clock)if (!load_n)q<=load_data;else if (!clear_n)q<=0;else //clockif(updown)q<=(q+1)%10;elsebeginif(q==0)q<=9;elseq<=q-1;endendmodule3.测试程序如下`timescale 1ns/1nsmodule test_decade_counte;reg clock,load_n,clear_n,updown;reg [3:0]load_data;wire [3:0]q;decade_counter T1(clock,load_n,clear_n,updown,load_data,q);initialbeginclock=0;clear_n=0;#30 clear_n=1;load_n=0;load_data=7;#30 load_n=1;updown=0;#300 updown=1;#300 updown=0;#300 updown=1;#300 $stop;endalways#10 clock=~clock;always@(q)$display("At time%t,q=%d",$time,q);endmodule4.波形如下5.测试结果如下# At time 0,q= 0# At time 30,q= 7# At time 70,q= 6# At time 90,q= 5# At time 110,q= 4# At time 130,q= 3# At time 150,q= 2# At time 170,q= 1# At time 190,q= 0# At time 210,q= 9# At time 230,q= 8# At time 250,q= 7# At time 270,q= 6# At time 290,q= 5# At time 310,q= 4# At time 330,q= 3# At time 370,q= 3 # At time 390,q= 4 # At time 410,q= 5 # At time 430,q= 6 # At time 450,q= 7 # At time 470,q= 8 # At time 490,q= 9 # At time 510,q= 0 # At time 530,q= 1 # At time 550,q= 2 # At time 570,q= 3 # At time 590,q= 4 # At time 610,q= 5 # At time 630,q= 6 # At time 650,q= 7 # At time 670,q= 6 # At time 690,q= 5 # At time 710,q= 4 # At time 730,q= 3 # At time 750,q= 2 # At time 770,q= 1 # At time 790,q= 0 # At time 810,q= 9 # At time 830,q= 8 # At time 850,q= 7 # At time 870,q= 6 # At time 890,q= 5 # At time 910,q= 4 # At time 930,q= 3 # At time 950,q= 2 # At time 970,q= 3 # At time 990,q= 4 # At time 1010,q= 5 # At time 1030,q= 6 # At time 1050,q= 7 # At time 1070,q= 8 # At time 1090,q= 9 # At time 1110,q= 0 # At time 1130,q= 1 # At time 1150,q= 2 # At time 1170,q= 3 # At time 1190,q= 4 # At time 1210,q= 5# At time 1250,q= 7。

verilog八位十进制计数器实验报告附源代码修订版

verilog八位十进制计数器实验报告附源代码修订版

v e r i l o g八位十进制计数器实验报告附源代码修订版IBMT standardization office【IBMT5AB-IBMT08-IBMT2C-ZZT18】8位10进制计数器实验报告一、实验目的学习时序逻辑电路学会用verilog语言设计时序逻辑电路掌握计数器的电路结构掌握数码管动态扫描显示原理二、实验内容实现一个8bit十进制(BCD码)计数器端口设置:用拨动开关实现复位和使能LED灯来表示8位数据用数码管显示16进制的八位数据1.复位时计数值为8‘h02.复位后,计数器实现累加操作,步长为1,逢9进1,,计数值达到8‘h99后,从0开始继续计数3.使能信号为1时正常计数,为0时暂停计数,为1时可继续计数。

4.每0.5s计数值加15.8位的结果显示在LED灯上,其中LED灯亮表示对应的位为1,LED灯灭表示对应的灯为06.用isim进行仿真,用forever语句模拟时钟信号输入,并给变量赋值仿真initial语句。

7.用7段数码管的后两位显示16进制下8位结果。

三、实验结果烧写结果:拨动reset开关到1时,LED灯显示10010000,7段数码管显示“90”。

之后拨动WE开关呢,开始计数,LED开始变化并且7段数码管开始计数。

从99后到达00,LED重新开始从00000000开始亮,且数码管重新从00开始计数。

之后拨动WE开关,暂停计数,LED暂停亮灭,七段数码管暂停变化,WE拨回1,继续计数。

拨动复位信号时,无视WE信号,直接复位。

仿真结果:当输入reset信号时波形变化如下当达到一个扫描信号的周期时的波形如下当达到一个以上计数信号的周期时的波形实验分析:实验总体结构和模块间关系如图所示:(其中还需要补上使能信号)实验原理:由于要求实现数码管和LED灯的显示,先考虑LED灯,可以直接由8位输出信号控制,而数码管需要同时显示两个不同的数字,需要时分复用,即快速的交替显示十位和个位,利用人眼的视觉暂留来达到同时显示。

verilog设计十进制计数器(含进位位)

verilog设计十进制计数器(含进位位)

verilog设计⼗进制计数器(含进位位)⼗进制计数器:设计要求:1、每当计数器值为4’b001时,⾃动回到4’b00002、每个时钟沿计数器值加13、进位输出carry应该与4'b1001同周期输出4、异步复位module cnt10 ( clk, rst_n, carry, cnt );input clk, rst_n;output carry;output [3:0] cnt;reg carry;reg [3:0] cnt;always @( posedge clk or negedge rst_n )beginif ( ~rst_n )begincnt <= 4'b0000;endelse if ( cnt == 4'b1001 )begincnt <= 4'b0000;endelsebegincnt <= cnt + 4'b0001;endendalways @(posedge clk or negedge rst_n)beginif(!rst_n)begincarry <= 1'b0;endelse if(cnt == 4'b1000)begincarry <= 1'b1;endelsecarry<= 1'b0;endendmoduleView Code测试程序:`timescale 1ns/1psmodule cnt10_tb();reg clk, rst_n;wire carry;wire [3:0] cnt;always #10 clk = ~clk;cnt10 cnt10_tb(.clk(clk),.rst_n(rst_n),.carry(carry),.cnt(cnt));initialbeginclk = 1'b0;rst_n = 1'b1;#10 rst_n = 1'b0;#10 rst_n = 1'b1;endendmodule波形图:在这个⼗进制计数器中,唯⼀要注意的⼀点就是进位位carry变化的时刻,如果是为了使下⼀级能正确接收到前⼀级的进位位标识,要在计数到九时使进位位有效;如上图波形所⽰。

用verilog hdl语言写出十进制数127的二进制完整表达方式

用verilog hdl语言写出十进制数127的二进制完整表达方式

用verilog hdl语言写出十进制数127的二进制完整
表达方式
在Verilog中,你可以使用`$binary`系统任务来将十进制数转换为二进制字符串。

下面是一个简单的例子,将十进制数127转换为二进制:
```verilog
module test;
initial begin
$display("%b", $binary(127));
end
endmodule
```
在这个例子中,`$binary(127)`会将十进制数127转换为二进制,然后
`$display`系统任务将结果打印出来。

运行这段代码,你应该会在仿真控制台上看到``,这是十进制数127的二进制表示。

需要注意的是,这会打印出一个无符号二进制整数,位数取决于输入数值的大小。

例如,如果输入是8位二进制数,那么结果将会是8位。

如果输入是7位二进制数,那么结果将会是7位,其余位将会用0填充。

在这个例子中,因为127是8位二进制数,所以结果将会是8位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog HDL是一种硬件描述语言,常用于数字电路设计和仿真。

在Verilog HDL中,我们经常需要进行十进制计算,因此熟练掌握Verilog HDL中的十进制计算方法对于数字电路设计工程师来说非常重要。

本文将介绍Verilog HDL中的十进制计算方法,并结合实例进行详细说明。

一、Verilog HDL中的十进制计算
在Verilog HDL中,可以使用十进制数进行计算和赋值。

十进制数可以用整数和实数表示。

1. 整数表示:可以直接使用十进制数来表示整数,例如:
```verilog
int a = 10; // 整数a赋值为10
```
2. 实数表示:可以使用科学计数法来表示实数,例如:
```verilog
real b = 1.5e3; // 实数b赋值为1500
```
二、十进制计算实例演示
下面通过实例来演示Verilog HDL中的十进制计算方法。

实例1:整数计算
假设我们需要设计一个模块,实现两个整数之和的计算。

我们可以使用Verilog HDL来实现这一功能。

```verilog
module adder (
input int a,
input int b,
output int sum
);
assign sum = a + b; // 计算a和b的和并赋值给sum
endmodule
```
在这个实例中,我们定义了一个add模块,其中有两个输入a和b,一个输出sum。

我们使用assign关键字进行赋值操作,计算a和b 的和并将结果赋值给sum。

这样,我们就实现了两个整数之和的计算功能。

实例2:实数计算
接下来,我们再演示一个实数计算的例子。

假设我们需要设计一个模块,实现两个实数相乘的计算。

我们同样可
以使用Verilog HDL来实现这一功能。

```verilog
module multiplier (
input real x,
input real y,
output real product
);
assign product = x * y; // 计算x和y的积并赋值给product
endmodule
```
在这个实例中,我们定义了一个multiplier模块,其中有两个输入x
和y,一个输出product。

我们同样使用assign关键字进行赋值操作,计算x和y的积并将结果赋值给product。

这样,我们就实现了两个
实数相乘的计算功能。

三、总结
通过以上实例演示,我们可以看到,在Verilog HDL中进行十进制计
算非常简单和灵活。

我们可以直接使用十进制数进行计算,也可以使
用整数和实数进行各种运算。

掌握Verilog HDL中的十进制计算方法,对于数字电路设计工程师来说非常重要。

希望本文能够帮助大家更好
地理解Verilog HDL中的十进制计算方法,为数字电路设计工作提供
帮助。

相关文档
最新文档