加减可控的二进制计数器Verilog HDL
用verilog HDL语言设计可逆计数器。

西安邮电学院
实验报告书
系部名称:电子工程学院学生姓名:xxx
专业名称:xxxx
班级:xxxx
实验时间:2011 年11月17日
1、掌握可逆计数器的工作原理。
2、学习用verilog HDL语言设计可逆计数器。
二、实验设备:
计算机一台,TD-EDA实验箱一台
三、实验内容:
用verilog HDL语言设计可逆计数器并进行仿真、引脚分配及下载到电路开发板进行功能验证。
四、实验程序:
module keni8(clk,enable,sum,col);
input clk,enable;
output[7:0] sum;
reg[7:0] sum;
output col;
reg col;
always @(posedge clk )
if(enable==1)
sum=sum+1;
else if(enable==0)
sum=sum-1;
else if(sum >= 8)
begin
sum=0;
col=1;
end
endmodule
五、运行结果:
1、在编程过程中,需小心谨慎,特别是注意标点符号的标注。
2、实验结果有一定的延时。
3、实验前需对TD-EDA实验箱进行了解,这样可以使实验更有效率。
实验二8位二进制加减可控计数器设计

实验二8进制加减可控计数器设计一、实验目的1.学习时序电路的设计,仿真和硬件测试,进一步熟悉VHDL设计技术。
2.学习使用SignalTap的使用方法。
3.学习用AS模式下对配置器件的编程。
二、实验内容1.参考书中4-22,设计一个异步清零和同步时钟使能的十进制加法计数器,在QuartusⅡ上进行编辑、编译、综合、适配、仿真。
给出其所有信号的时序仿真波形。
引脚锁定后进行编译、下载和硬件测试实验。
2.使用SignalTap II对此计数器进行实时测试,保存波形。
3.从设计中去除SignalTap II,要求全程编译后生成用于配置器件EPCS1编程的压缩POF文件,并使用ByteBlasterII,通过AS模式对实验板上的EPCS1进行编程,最后进行验证。
4.设计含有异步清零和同步时钟使能的8进制加减可控计数器。
并完成硬件测试。
一般加法计数器的设计参照书本例4-22。
异步清零表示只要清零信号有效,计数器输出为某个特定的值(比如00H),计数器使能表示只有该信号有效时,才开始计数,其他时候停止计数。
另外加减控制线来控制计数器是加还是减。
三、实验报告将实验原理、设计过程、编译仿真波形和分析结果写进实验报告。
四、实验步骤1.创建工程在D盘中新建一个文件夹D:\ cnt10,此文件夹用于存放整个工程。
打开Quartus II 7.2,在菜单中选择File—〉New Project Wizard 将会出现一个信息框,这个对话框介绍创建工程步骤,可以直接选Next,这时会出现如图1所示的对话框。
这里需输入的是欲创建工程的基本信息,三个输入栏中分别输入的是工程将被保存的路径及工程文件夹、工程的名称和顶层实体的名称。
建议工程名与顶层实体名称保持一致。
输入完毕我们就可以点击Next。
图1 新建工程基本信息对话框然后出现图2所示的添加工程文件对话框。
在这里需要做的是将已经写好的VHDL文件加入到工程中。
本次实验,可以直接点击Next,以后再添加VHDL 文件的工作。
verilog 加法

Verilog加法引言Verilog是一种硬件描述语言,它被广泛应用于数字电路设计和硬件描述。
在数字电路中,加法是最基本的运算之一。
本文将介绍Verilog中的加法实现方法,包括全加器、加法器和多位加法器。
全加器定义全加器是一种用于实现二进制加法的电路。
它接受两个输入位和一个进位位,并产生一个输出位和一个进位位。
全加器的真值表如下:输入A 输入B 进位位输出位进位位0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1Verilog实现下面是一个使用Verilog描述的全加器的例子:module full_adder(input A, input B, input Cin, output S, output Cout);assign S = A ^ B ^ Cin;assign Cout = (A & B) | (Cin & (A ^ B));endmodule其中,A和B是输入位,Cin是进位位,S是输出位,Cout是进位位。
加法器定义加法器是一种用于实现多位二进制加法的电路。
它由多个全加器组成,每个全加器负责一位的加法运算。
加法器的输入包括两个多位二进制数和一个进位位,输出是一个多位二进制数和一个进位位。
Verilog实现下面是一个使用Verilog描述的4位加法器的例子:module adder_4bit(input [3:0] A, input [3:0] B, input Cin, output [3:0] S, out put Cout);wire [3:0] c;wire s0, s1, s2;full_adder FA0(A[0], B[0], Cin, S[0], c[0]);full_adder FA1(A[1], B[1], c[0], S[1], c[1]);full_adder FA2(A[2], B[2], c[1], S[2], c[2]);full_adder FA3(A[3], B[3], c[2], S[3], Cout);endmodule其中,A和B是输入的4位二进制数,Cin是进位位,S是输出的4位二进制数,Cout是进位位。
Verilog实现加减乘除计算器

Verilog实现加减乘除计算器主要内容: 1. 按键按下后,进⾏加减乘除操作 2. Verilog往TXT⽂本⽂件中写⼊数据 3. 完成计算模块 4. 最终实现加减乘除计算器1. 实现按键按下后,选择option,进⾏加减乘除操作,除法计算结果为商&余数module jsq(clk,rst_n,key,option,x,y,result,quotient,remainder);parameter N = 16; // 输⼊数的位数input clk; // 输⼊时钟input rst_n; // 低电平有效的复位(清零)input key;input [1:0]option;input [N-1:0] x;input [N-1:0] y;output [2*N-1:0] result;output [N-1:0] quotient; //输出计算的商output [N-1:0] remainder; //输出计算的余数reg [2*N-1:0] result_r;reg [N-1:0] quotient_r,remainder_r;always @ (posedge clk or negedge rst_n)beginif (!rst_n)beginresult_r <= 1'b0;quotient_r <= 1'b0;remainder_r <= 1'b0;endelsebeginif (key == 1'b0)begin//按键按下case(option)2'b00: result_r = x + y;2'b01: result_r <= x + (~y + 1'b1);2'b10: result_r = x * y;2'b11: //result_r = x / y;beginquotient_r = x / y;remainder_r = x % y;endendcaseendelsebegin// 按键释放result_r <= 1'b0;quotient_r <= 1'b0;remainder_r <= 1'b0;endendendassign result = result_r ;assign quotient= quotient_r;assign remainder = remainder_r;endmoduleView Code`timescale 1ns/1ps`define clock_period 20module jsq_tb;reg clk;reg rst_n;reg key;reg [1:0]option;reg [15:0] x,y;wire [31:0] result;wire [15:0] quotient;wire [15:0] remainder;initial beginclk = 1'b1;rst_n = 1'b0;key = 1'b1; // 复位时,按键释放# 20//复位20nsrst_n = 1'b1;# 20key = 1'b0;option = 2'b10;# 100key = 1'b1;# 20key = 1'b0;option = 2'b11;# 100// key = 1'b1;// # 20$stop;endalways #(`clock_period/2) clk = ~clk; //50Mjsq #(.N(16)) jsq_0(.clk(clk),.rst_n(rst_n),.key(key),.option(option),.x(x),.y(y),.result(result),.quotient(quotient),.remainder(remainder));initial beginx = 0;repeat(20)#(`clock_period) x = {$random}%100; //通过位拼接操作{}产⽣0—59范围的随机数endinitial beginy = 0;repeat(20)#(`clock_period) y = {$random}%50;end/*integer i;initial beginx = 0;y = 0;for(i = 0; i < 20; i = i + 1)begin//利⽤$random系统函数产⽣随机数。
VerilogHDL简单计算器设计

实用文档目录第一章设计目的及任务要求 (1)1.1 设计目的 (1)1.2 设计任务 (1)1.3 课设要求 (1)第二章设计思路 (2)2.1 设计总体框图 (2)2.2 设计原理 (2)2.2.1 计算其原理 (2)2.2.2 数码显示原理 (2)2.2.3 八位数码管扫描的原理 (3)第三章设计源程序及分析 (4)3.1 计算器模块 (4)3.1.1 计算器源程序 (4)3.1.2 计算器程序分析 (4)3.2 数码管显示部分 (5)3.2.1 数码管显示源程序 (5)3.2.2 数码管显示程序分析 (5)3.3 循环扫描模块 (6)3.3.1 循环扫描程序 (6)3.3.2 循环程序分析 (6)3.4 总程序及其分析 (7)第四章时序仿真和结果验证 (10)4.1 计算器时序仿真及其分析 (10)4.2 数码管时序仿真及分析 (10)4.3 总体时序仿真图 (10)4.4 结果验证 (11)第五章心得体会 (12)第一章设计目的及任务要求1.1 设计目的(1)进一步加强熟练EDA基础知识。
(2)熟练掌握Quartus 6.0软件的使用以及用该软件编程和仿真的全过程。
(3)培养独立思考问题,解决问题的能力以及查阅相关资料和资料的正确使用能力,为明年的毕业设计打下良好的设计基础。
1.2 设计任务设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。
1.3 课设要求(1)说明题目的设计原理和思路、采用方法及设计流程。
(2)系统框图、Verilog语言设计程序或原理图。
(3)对各子模块的功能以及各子模块之间的关系做较详细的描述。
(4)详细说明调试方法和调试过程。
(5)说明测试结果:仿真时序图和结果显示图,并对其进行说明和分析。
第二章设计思路2.1 设计总体框图有分析可知,本次课程设计可以分成五个木块来实现相应的功能,分别是输入模块,计算模块,扫描模块,输出模块以及显示模块。
EDA技术与Verilog_HDL(潘松)第四章课后习题答案

0
1 1
1
0 0
1
0 1
0
1 0
1
0 0
1
1
1
1
0
1
0
1
0
1
1
1
0110 Nhomakorabea0
0
module f_suber(x,y,sub_in,diffr,sub_out); //一个二进制全减器顶层设计进行了阐述 output diffr,sub_out; input x,y,sub_in; wire e,d,f; h_suber u1(x,y,e,d); // h_suber u2(.x(e),.diff(diffr),.y(sub_in),.s_out(f));// or2a u3(.a(d),.b(f),.c(sub_out)); endmodule
reg [2:0]A ;
wire[7:0]Y ; reg G1 ,G2 ,G3;
decoder3_8 DUT ( G1 ,Y ,G2 ,A ,G3 );
initial begin $monitor($time,"A=%d,G1=%b,G2=%b, G3=%b,Y= %d\n",A, G1, G2, G3, Y); end
习
module MUXK (a1, a2, a3, s0, s1, outy); input a1, a2, a3, s0, s1; output outy; wire outy; wire tmp;
题
4-6 图4-26所示的是双2选1多路选择器构成的电路MUXK。对于其中MUX21A,当s=0 和s=1时,分别有y=a和y=b。试在一个模块结构中用两个过程来表达此电路。 答:参考实验1
verilog中realtime的加减

在Verilog中,可以使用实时(realtime)运算符来执行实时加法和减法操作。
实时运算符用于表示两个或多个连续的信号之间的加法或减法。
下面是实时加法和减法的示例代码:
```verilog
module RealtimeAddSub (
input wire [7:0] a,
input wire [7:0] b,
output reg [7:0] sum,
output reg [7:0] diff
);
always @* begin
sum = a + b;
diff = a - b;
end
endmodule
```
在上述代码中,我们定义了一个名为`RealtimeAddSub`的模块,它有两个8位输入信号`a` 和 `b`,以及两个8位输出信号 `sum` 和 `diff`。
在`always`块中,我们使用实时运算符执行加法和减法操作,并将结果赋值给对应的输出信号。
请注意,实时运算符只能用于连续赋值,不能用于非连续赋值(例如在时序块中使用)。
因此,在使用实时运算符时要确保其在连续赋值环境中使用。
verilog hdl开关计数回路编程

Verilog HDL开关计数回路编程在数字电路设计中,开关计数回路是一种非常重要的电路结构。
它可以用来实现计数功能,是数字系统中常见的一种功能模块。
在本文中,我将就Verilog HDL开关计数回路编程这一主题展开深入探讨,并带你逐步理解这个概念。
1. Verilog HDL简介Verilog Hardware Description Language(HDL)是一种硬件描述语言,用于描述、建模和仿真数字电路。
它是一种行为级的描述语言,在FPGA和ASIC设计中被广泛应用。
Verilog HDL的使用使数字电路设计工程师能够更轻松地实现所需的功能,并对其进行仿真和验证。
2. 开关计数回路的原理开关计数回路是一种使用触发器和计数器构成的计数电路。
在Verilog HDL中,我们可以通过描述触发器的行为和计数器的逻辑来实现开关计数回路。
触发器用于存储当前的计数值,而计数器用于控制计数的逻辑。
通常,我们会使用寄存器或者移位寄存器来实现计数器。
这种组合结构可以实现从二进制数0到N的自动计数。
3. Verilog HDL中的开关计数回路编程在Verilog HDL中,我们可以通过module、always、initial等关键字来描述开关计数回路的行为。
我们需要定义输入和输出接口,然后编写描述触发器和计数器行为的代码。
在Verilog HDL中,我们可以使用时钟信号来控制计数的节奏,通过简单的逻辑操作实现计数的增加和重置。
这样,我们就可以完整地描述一个开关计数回路的功能。
4. 实例分析下面,我以一个4位二进制计数器为例,来展示Verilog HDL中开关计数回路的编程过程:module counter(input clk,input rst,output reg[3:0] count);always @(posedge clk or posedge rst)beginif (rst)count <= 4'b0000;elsecount <= count + 1;endendmodule在这个例子中,我们定义了一个4位二进制计数器。