当前位置:文档之家› 数电大作业

数电大作业

数电作业课程名称:数字电子技术基础课程时间:2015年秋授课教师:康磊学生姓名:XXX学生班级:学生学号:联系电话:哈尔滨工业大学英才学院2015年12月大作业一一、设计目的利用Verilog HDL设计一个电路,使其可以检测输入的一段由二进制数组成的序列,若序列中有连续的三个或者三个以上的1,则电路下一个时钟到来时输出为1,否则为0。

状态转换图如图所示。

二、设计步骤1、安装ISE14.2,并学会如何仿真。

2、根据状态图编写verilog程序。

3、仿真并生成仿真波形图。

4、保存项目并完成报告。

三、程序源代码1、主程序`timescale 1ns / 1psmodule shudian1(clk,rst,din,out);input clk,rst,din;output out;reg[2:1] y, Y;reg out;parameter A=2'b00,B=2'b01,C=2'b10,D=2'b11;always @(posedge clk or negedge rst)beginif(!rst)y <= A;elsey <= Y;endalways@(y or din) begincase(y)A: beginout = 0;if(din) Y=B;else Y=A;endB: beginout = 0;if(din) Y=C;else Y=A;endC: beginout = 0;if(din) Y=D;else Y=A;endD: beginout = 1;if(din) Y=D;else Y=A;enddefault:beginout = 0;Y = A;endendcaseendendmodule2、测试程序`timescale 1ns / 1ps module sudian11;// Inputsreg clk;reg rst;reg [20:0]data;assign din=data[20];// Outputswire out;// Instantiate the Unit Under Test (UUT)shudian1 uut (.clk(clk),.rst(rst),.din(din),.out(out));initialbeginrst = 0;#200 rst = 1;endinitialbeginclk = 0;endalwaysbegin#50 clk=~clk;endinitialbegindata=20'b10110111011110101101;endalways @(posedge clk)#2 data ={data[19:0],data[20]};endmodule四、仿真波形图将仿真时间设为1.5us,我们可以看到如下波形图。

可以看出,当输入信号有连续的三个或者三个以上的1,则电路输出在下一个时钟到来变为1,否则为0,且电路为Moore型,输出是当前状态的函数。

大作业二一、设计目的利用Verilog HDL设计一个电路,使其可以检测输入的一段由二进制数组成的序列,若序列中有连续的三个或者三个以上的1,则电路立刻输出为1,否则为0。

状态转换图如图所示。

二、设计步骤1、根据状态图编写verilog程序。

2、仿真并生成仿真波形图。

3、保存项目并完成报告。

三、程序源代码1、主程序`timescale 1ns / 1psmodule shudian2(clk , w , rst , z);input clk, rst, w;output z;reg z;reg [1:0] y, Y;parameter A=2'b00, B=2'b01,C=2'b10;always @ (posedge clk or negedge rst)beginif(!rst)y = A;elsey <= Y;endalways @(w or y)begincase(y)A: beginif(!w)beginY = A;z = 0;endelsebeginY = B;z = 0;endendB: beginif(!w)beginY = A;z = 0;endelsebeginY = C;z = 0;endendC: beginif(!w)beginY = A;z = 0;endelsebeginY = C;z = 1;endenddefault:beginz = 0;Y = A;endendcaseendendmodule2、测试程序`timescale 1ns / 1psmodule shudian22;reg clk;reg rst;reg [20:0]data;assign w=data[20];wire z;// Instantiate the Unit Under Test (UUT) shudian2 uut (.clk(clk),.w(w),.rst(rst),.z(z));initial beginrst = 0;#200; rst=1;endinitial beginclk=0;endalwaysbegin#50 clk=~clk;endinitialbegindata=20'b10110111011110110101;endalways @(posedge clk)#2 data ={data[19:0],data[20]};endmodule四、仿真波形图将仿真时间设为1.5us,我们可以看到如下波形图。

可以看出,当输入信号有连续的三个或者三个以上的1,电路输出立刻为1,否则为0,电路为Mealy型,输出是当前状态和输入的函数。

大作业三一、设计目的利用Verilog HDL设计一个模为学号后三位(408)的同步加减法计数器,使其当输入X为0时立即执行加计数,当X为1时立即执行减计数。

二、设计步骤1、根据状态图编写verilog程序。

2、仿真并生成仿真波形图。

3、保存项目并完成报告。

三、程序源代码1、主程序`timescale 1ns / 1psmodule shudian3(clk,rst,out,X);input clk,rst;input X;output reg[8:0]out=0;parameter A=0,B=1;always @(posedge clk or X)case(X)A:beginif(!rst) out <= 0;else if(out>=407) out<=0;else out <= out+1;endB:beginif(!rst) out <= 0;else if(!out) out<=407;else out <= out-1;endendcaseendmodule2、测试程序`timescale 1ns / 1psmodule shudian33;reg clk;reg rst;reg X;wire [8:0] out;// Instantiate the Unit Under Test (UUT)shudian3 uut (.clk(clk),.rst(rst),.out(out),.X(X));parameter PERIOD = 2;always beginclk = 1'b0;#(PERIOD/2) clk = 1'b1;#(PERIOD/2);endinitial beginclk = 0;rst = 0;X = 0;#100;rst = 1;begin#1000;X=~X;endendendmodule四、仿真波形图1.当rst为1时,开始计数。

X=0时进行加计数2.当X=0时进行加计数,且模为408。

3. 当X=1时进行减计数。

4.当X=1时进行减计数,且模为408。

可以看出,这个同步加减法计数器完美的完成了加计数和减计数功能。

相关主题