北京理工大学数字系统设计与实验报告

合集下载

北京理工大学数据结构实验报告一

北京理工大学数据结构实验报告一
实验报告一:线性表
班级:05111451姓名:任子龙学号:1120140167
1、需求分析
1.学生成绩利用单链表存储,方便随时插入和删除学生成绩记录,实现动态管理,一个学生的成绩信息作为一个结点。
2.程序以用户和计算机对话的方式执行,即在计算机终端上显示“提示信息”之后,用户在键盘上输入规定的数据,回车后,运算结果显示在其后。
p->next=NULL;
head=p;
printf("\t输入需要录入信息的学生人数\n");
scanf("%d",&n);
for(i=0;i<n;i++)//该循环语句是用来输入录入学生的各类信息//
{ q=(student*)malloc(sizeof(student));
q->num=i+1;
//若1≤i≤n,则在L的第i个元素后面插入新元素e。
voidDeletenode(&L,i);
//若1≤i≤n,则删除L的第i个元素。
其中,部分操作的伪码算法如下:
void input(){ //输入学生成绩信息//
int i=0,j=0,n;
p=(student*)malloc(sizeof(student));//申请空间,创建带头结点的空指针
p=head;
if(!p) {printf("提示:系统尚未录入任何信息!\n");exit(0);
}
p=head->next;
while(flag&&p)
{
if(p->studentnum==stdnum)
{
printf("学生的成绩信息如下:\n");

北京理工大学数信实验报告

北京理工大学数信实验报告

实验1 利用DFT 分析信号频谱一、实验目的1、加深对DFT 原理的理解。

2、应用DFT 分析信号的频谱。

3、深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。

二、实验设备与环境计算机、MATLAB 软件环境。

三、实验基础理论1.DFT 与DTFT 的关系:有限长序列的离散时间傅里叶变换(e )j X ω 在频率区间(02)ωπ≤≤ 的N 个等间隔分布的点2(0k N 1)kk N πω=≤≤-上的N 个取样值可以有下式表示:2120(e )|(n)e(k)(0k N 1)N jkn j Nkk NX x X πωπω--====≤≤-∑由上式可知,序列(n)x 的N 点DFT (k)X ,实际上就是(n)x 序列的DTFT 在N 个等间隔频率点2(0k N 1)kk N πω=≤≤-上样本(k)X 。

2.利用DFT 求DTFT方法1:由(k)X 恢复出(e )j X ω的方法如下:由流程知:11(e )(n)e[(k)W]e N j j nkn j nNn n k X x X Nωωω∞∞----=-∞=-∞===∑∑∑继续整理可得到:12()(k)()Ni k kx e X N ωπφω==-∑其中(x)φ为内插函数:sin()2()sin()2N N ωφωω=方法2:实际在MATLAB 计算中,上述插值运算不见得是最好的办法。

由于DFT 是DTFT 的取样值,其相邻两个频率样本点的间距为2N π,所以如果我们增加数据的长度N ,使得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样就可以利用DFT 计算DTFT 。

如果没有更多的数据,可以通过补零来增加数据长度。

3.利用DFT 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。

对于连续时间非周期信号(t)a x ,按采样间隔T 进行采样,阶段长度M ,那么:1(j )(t)e(nT)e M j tj nTa a a n X x dt T x -∞-Ω-Ω-∞=Ω==∑⎰对(j )a X Ω 进行N 点频域采样,得到:2120(j )|(nT)e(k)M jkn Na a M kn NTX T x TX ππ--Ω==Ω==∑采用上述方法计算信号(t)a x 的频谱需要注意如下三个问题:(1)频谱混叠;(2)栅栏效应和频谱分辨率; (3)频谱泄露。

数字系统设计实验报告

数字系统设计实验报告

一、实验目的1. 理解数字系统设计的基本概念和流程。

2. 掌握数字电路的基本设计方法和技巧。

3. 熟悉常用数字集成电路的使用方法。

4. 培养实际动手能力和团队协作精神。

二、实验内容本次实验主要围绕数字系统设计展开,包括以下几个方面:1. 数字电路原理图绘制与仿真2. 数字系统硬件描述语言(HDL)编程3. 顶层模块设计4. 系统仿真与调试三、实验步骤1. 数字电路原理图绘制与仿真(1)根据实验要求,设计数字电路原理图,如数字时钟、移位寄存器等。

(2)使用Multisim等仿真软件对原理图进行仿真,验证电路功能。

2. 数字系统硬件描述语言(HDL)编程(1)根据原理图,使用Verilog或VHDL等HDL语言编写代码。

(2)对代码进行语法检查,确保代码正确。

3. 顶层模块设计(1)根据实验要求,设计顶层模块,如数字时钟控制器、移位寄存器控制器等。

(2)将底层模块(如计数器、触发器等)集成到顶层模块中。

4. 系统仿真与调试(1)使用仿真软件对顶层模块进行仿真,验证系统功能。

(2)根据仿真结果,对代码进行修改和优化,直至系统功能满足要求。

四、实验结果与分析1. 数字电路原理图绘制与仿真(1)原理图设计:根据实验要求,设计了一个数字时钟电路原理图,包括分频器、计数器、触发器等模块。

(2)仿真结果:通过仿真软件对原理图进行仿真,验证了电路功能。

2. 数字系统硬件描述语言(HDL)编程(1)代码编写:使用Verilog语言编写了数字时钟电路的代码,包括分频器、计数器、触发器等模块。

(2)代码验证:通过语法检查,确保代码正确。

3. 顶层模块设计(1)顶层模块设计:根据实验要求,设计了一个数字时钟控制器顶层模块,将底层模块集成到顶层模块中。

(2)系统仿真:通过仿真软件对顶层模块进行仿真,验证了系统功能。

4. 系统仿真与调试(1)系统仿真:通过仿真软件对顶层模块进行仿真,验证了系统功能。

(2)调试:根据仿真结果,对代码进行修改和优化,直至系统功能满足要求。

北京理工大学数据结构实验报告2

北京理工大学数据结构实验报告2

《数据结构与算法统计》实验报告学院:班级:学号:姓名:一、实验目的⑴熟悉VC++6.0环境,学习使用C++实现栈的存储结构;⑵通过编程、上机调试,进一步理解栈的基本概念;⑶锻炼动手编程,独立思考的能力。

二、实验内容实现简单计算器的功能,请按照四则运算加、减、乘、除、幂(^)和括号的优先关系和惯例,编写计算器程序。

要求支持运算符:+、-、*、/、%、()和=:①从键盘输入一个完整的表达式,以回车作为表达式输入结束的标志;②输入表达式中的数值均为大于等于零的整数,如果中间计算过程中出现小数也只取整进行计算。

例如,输入:4+2*5= 输出:14输入:(4+2)*(2-10)= 输出:-48三、程序设计1、概要设计为实现上述功能,应使用两个栈,分别寄存操作数和运算符。

为此需要栈的抽象数据结构。

⑴栈的抽象数据类型定义如下:ADT Stack{数据对象:D = { ai | ai ∈ElemSet, i=1,…,n,n≥0 }数据关系:R1 = { <ai-1, ai> | ai-1,ai ∈D, i=2, …,n }基本操作:InitStack1(SqStack1 &S)操作结果:创建一个空栈S,以存储运算符InitStack2(SqStack2 &S)操作结果:创建一个空栈S,以存储操作数Push1(SqStack1 &S,char e)初始条件:栈S已存在操作结果:插入运算符e作为新的栈顶元素Push2(SqStack2 &S,int e)初始条件:栈S已存在操作结果:插入操作数e作为新的栈顶元素Precede(char d,char c)初始条件:d,c为运算符操作结果:若d优先级大于c,返回>;若d优先级小于c,返回<;若d优先级等于c,返回=;GetTop1(SqStack1 &S)初始条件:栈S已存在且非空操作结果:用e返回寄存运算符栈S的栈顶元素GetTop2(SqStack2 &S)初始条件:栈S已存在且非空操作结果:用e返回寄存操作数栈S的栈顶元素Pop1(SqStack1 &S,char &e)初始条件:栈S已存在且非空操作结果:删除寄存运算符栈S的栈顶元素Pop2(SqStack2 &S,int &e)初始条件:栈S已存在且非空操作结果:删除寄存操作数栈S的栈顶元素Operate(int a,char theta,int b)初始条件:a,b为整数,theta为运算符操作结果:返回a与b运算的结果EvaluateExpression()初始条件:输入合法的表达式操作结果:返回表达式的值}ADT Stack⑵主程序流程调用EvaluateExpression()函数计算表达式的值,输出在屏幕上。

数字系统的设计与实验实验报告

数字系统的设计与实验实验报告

数字系统的设计与实验学院:专业:班级:学号:姓名指导老师2013 年12月 10 日实验一原码反码发生器一实验目的:1、掌握组合逻辑电路的基本设计方法。

2、学习波形仿真的方法。

3、加深对最简单的二进制原码、反码的理解,灵活运用基本的逻辑门。

二实验内容1、设计的电路应具备以下功能:A.包含如下端口:一个选择信号端口,一个8位二进制输入端口,一个原码/反码输出端口。

B. 选择信号的逻辑状态为0时输出原码;逻辑状态为1时输出反码。

2、完成电路设计。

3、对设计的正确性进行验证。

三实验要求1、列出所要实现的功能的真值表。

2、画出电路的逻辑图。

3、编写用VHDL语言描述的源程序。

library ieee;use ieee.std_logic_1164.all;entity shiyan1 isport (cin : in std_logic_vector(7 downto 0);fin : in std_logic;cout: out std_logic_vector(7 downto 0));end shiyan1;architecture behave of shiyan1 isbeginprocess(fin)begincase fin iswhen '1' => cout <= not cin;when '0' => cout <= cin;when others => null;end case;end process;end behave;4、在MAX 软件平台上完成编译和功能仿真。

一、信号端口为0时二、信号端口为1总结:经过上个实验后,对maxplu件有了一定了解,对于 VHDL也更加熟悉,首先构造真值表,画出逻辑电路图,然后编写程序生成仿真波形图。

在编写程序的时候也出现了一些错误,比如是将单个字符用双引号,结果编译通不过。

老是报错。

北京理工大学计算机实验一报告表

北京理工大学计算机实验一报告表

北京理工大学计算机实验一报告表北京理工大学计算机实验一报告一、实验目的:1. 了解计算机实验室的硬件设备,熟悉计算机的组成和工作原理;2. 掌握计算机的基本操作和调试方法,熟悉计算机的操作系统和软件环境;3. 学习使用计算机进行数据输入、处理和输出。

二、实验内容:1. 硬件设备:了解计算机的主要硬件组成,包括中央处理器(CPU)、内存、硬盘、显卡等;2. 操作系统:熟悉计算机的操作系统,学习操作系统的基本功能和操作方法;3. 软件环境:了解计算机的软件环境,学习使用常用的办公软件和编程工具;4. 数据输入:学习使用键盘和鼠标进行数据输入,了解数据的输入格式和方式;5. 数据处理:学习使用计算机进行数据处理,包括数据的存储、计算和分析;6. 数据输出:学习使用计算机进行数据输出,包括打印、显示和保存等方式。

三、实验步骤:1. 硬件设备:了解计算机的主要硬件组成,包括CPU、内存、硬盘、显卡等,熟悉各个硬件的功能和作用;2. 操作系统:熟悉计算机的操作系统,学习操作系统的基本功能和操作方法,包括开机、关机、重启等;3. 软件环境:了解计算机的软件环境,学习使用常用的办公软件和编程工具,如Microsoft Office和Visual Studio等;4. 数据输入:学习使用键盘和鼠标进行数据输入,了解数据的输入格式和方式,如文本、数字、图像等;5. 数据处理:学习使用计算机进行数据处理,包括数据的存储、计算和分析,如使用Excel进行数据分析;6. 数据输出:学习使用计算机进行数据输出,包括打印、显示和保存等方式,如使用打印机打印数据报告。

四、实验结果:本次实验我们成功地熟悉了计算机的硬件设备和软件环境,掌握了计算机的基本操作和调试方法。

我们学会了使用键盘和鼠标进行数据输入,使用计算机进行数据处理和输出。

通过实验,我们进一步了解了计算机的组成和工作原理,对计算机的操作系统和软件环境有了更深入的了解。

数字信号实验报告二,北京理工大学,实验报告

数字信号实验报告二,北京理工大学,实验报告

实验三利用FFT计算线性卷积一、实验目的1.掌握利用FFT计算线性卷积的原理及具体实现方法。

2.加深理解重叠相加法和重叠保留法。

3.考察利用FFT计算线性卷积各种方法的适用范围。

二、实验设备与环境计算机、MATLAB软件环境三、实验基础理论1.线性卷积与圆周卷积设为L点序列,为M点序列,和的线性卷积为的长度为L+M-1。

和的N点圆周卷积为圆周卷积与线性卷积相等而不产生交叠的必要条件为圆周卷积定理:根据DFT的性质,和的N点圆周卷积的DFT等于它们DFT的乘积2.快速卷积快速卷积算法用圆周卷积实现线性卷积,根据圆周卷积定理利用FFT算法实现圆周卷积。

可以将快速卷积的步骤归纳如下:(1)为了使线性卷积可以利用圆周卷积来计算,必须选择;同时为了能使用基2-FFT 完成卷积运算,要求N =。

采用补零的办法是和的长度均为N 。

(2)计算和的N 点FFTFFT −−−→(3)组成卷积(4)利用IFFT 计算IDFT ,得到线性卷积(k)()IFFT Y y n −−−→3.分段卷积我们考察单位取样响应为的线性系统,输入为,输出为,则当输入序列时再开始进行卷积,会使输出相对输入有较大的延时,再者如果序列太长,需要大量的存储单元。

为此,我们把,分别求出每段的卷积,合在一起其到最后的总输出。

这种方法称为分段卷积。

分段卷积可细分为重叠相加法和重叠保留法。

重叠保留法:设的长度为,的长度为M 。

我们把序列分成多段N 点序列,每段与前一段重叠M-1个样本。

由于第一段没有前一段保留信号,为了修正,我们在第一个输入段前面填充M-1个零。

计算每一段的圆周卷积,则其每段卷积结果的前M-1个样本不等于线性卷积值,不是正确的样本值。

所以我们将每段卷积结果的前M-1个样本舍去,只保留后面的N-M+1个正确输出样本,把这些输出样本合起来得到总的输出。

利用FFT 实现重叠保留法的步骤如下:(1)在前面填充M-1个零,扩大以后的序列为1ˆ(){0,0,0,()}M x n x n -=个(2)将分为若干N 点子段,设L=N-M+1为每一段的有效数据长度,则第i 段〖ˆ(m)x1,0,01iL m iL N i n N ≤≤+-≥≤≤- (3)计算每一段与的N 点圆周卷积,利用FFT 计算圆周卷积:FFT−−−→(k)()IFFT i i Y y n −−−→(4)舍去每一段卷积结果的前M-1个样本,连接剩下样本,得到卷积结果。

数字系统设计_实验报告

数字系统设计_实验报告

一、实验目的1. 熟悉数字系统设计的基本流程和方法;2. 掌握数字系统硬件描述语言(如Verilog)的基本语法和设计方法;3. 培养动手实践能力,提高数字系统设计水平;4. 了解数字系统设计中常用模块的功能和实现方法。

二、实验内容1. 数字系统硬件描述语言(Verilog)编程2. 数字系统模块设计3. 数字系统仿真与调试三、实验步骤1. 设计数字系统模块(1)分析数字系统功能需求,确定模块功能;(2)根据模块功能,设计模块的输入输出端口和内部结构;(3)使用Verilog语言编写模块代码。

2. 编写顶层模块(1)根据数字系统功能需求,设计顶层模块的输入输出端口和内部结构;(2)将已设计的模块实例化,连接各模块端口;(3)编写顶层模块代码。

3. 仿真与调试(1)使用仿真工具(如ModelSim)对顶层模块进行仿真;(2)观察仿真波形,分析模块功能是否满足设计要求;(3)根据仿真结果,对模块代码进行修改和优化;(4)重复步骤(2)和(3),直至模块功能满足设计要求。

四、实验结果与分析1. 数字系统模块设计(1)设计了一个4位加法器模块,包括两个4位输入端口、一个4位输出端口和两个进位输出端口;(2)设计了一个2位乘法器模块,包括两个2位输入端口和一个4位输出端口;(3)设计了一个8位存储器模块,包括一个8位输入端口、一个8位输出端口和一个地址输入端口。

2. 顶层模块设计(1)根据功能需求,设计了一个包含加法器、乘法器和存储器的数字系统顶层模块;(2)将已设计的模块实例化,连接各模块端口;(3)编写顶层模块代码。

3. 仿真与调试(1)使用ModelSim对顶层模块进行仿真;(2)观察仿真波形,发现加法器和乘法器功能正常,但存储器模块存在错误;(3)分析存储器模块代码,发现地址输入端口的逻辑关系错误;(4)修改存储器模块代码,重新进行仿真,验证模块功能正确。

五、实验总结1. 通过本次实验,掌握了数字系统设计的基本流程和方法;2. 学会了使用Verilog语言进行数字系统模块设计;3. 培养了动手实践能力,提高了数字系统设计水平;4. 了解数字系统设计中常用模块的功能和实现方法。

数字系统设计及实验实验报告

数字系统设计及实验实验报告

数字系统设计及实验实验报告一、实验目的数字系统设计及实验课程旨在让我们深入理解数字逻辑的基本概念和原理,掌握数字系统的设计方法和实现技术。

通过实验,我们能够将理论知识应用于实际,提高解决问题的能力和实践动手能力。

本次实验的具体目的包括:1、熟悉数字电路的基本逻辑门、组合逻辑电路和时序逻辑电路的设计方法。

2、掌握使用硬件描述语言(如 Verilog 或 VHDL)进行数字系统建模和设计。

3、学会使用相关的电子设计自动化(EDA)工具进行电路的仿真、综合和实现。

4、培养团队合作精神和工程实践能力,提高解决实际问题的综合素质。

二、实验设备和工具1、计算机:用于编写代码、进行仿真和综合。

2、 EDA 软件:如 Quartus II、ModelSim 等。

3、实验开发板:提供硬件平台进行电路的下载和测试。

4、数字万用表、示波器等测量仪器:用于检测电路的性能和信号。

三、实验内容1、基本逻辑门电路的设计与实现设计并实现与门、或门、非门、与非门、或非门和异或门等基本逻辑门电路。

使用 EDA 工具进行仿真,验证逻辑功能的正确性。

在实验开发板上下载并测试实际电路。

2、组合逻辑电路的设计与实现设计一个 4 位加法器,实现两个 4 位二进制数的相加。

设计一个编码器和译码器,实现数字信号的编码和解码。

设计一个数据选择器,根据控制信号选择不同的输入数据。

3、时序逻辑电路的设计与实现设计一个同步计数器,实现模 10 计数功能。

设计一个移位寄存器,实现数据的移位存储功能。

设计一个有限状态机(FSM),实现简单的状态转换和控制逻辑。

四、实验步骤1、设计方案的确定根据实验要求,分析问题,确定电路的功能和性能指标。

选择合适的逻辑器件和设计方法,制定详细的设计方案。

2、代码编写使用硬件描述语言(如 Verilog 或 VHDL)编写电路的代码。

遵循代码规范,注重代码的可读性和可维护性。

3、仿真验证在 EDA 工具中对编写的代码进行仿真,输入不同的测试向量,观察输出结果是否符合预期。

数字系统实验报告模板

数字系统实验报告模板

实验名称:____________________实验日期:____________________实验地点:____________________一、实验目的1. 理解数字系统的基本组成和原理。

2. 掌握数字电路的基本实验方法和技能。

3. 提高对数字电路的分析和设计能力。

二、实验原理(一)实验背景简要介绍数字系统的概念、发展历程及其在现代社会中的应用。

(二)实验原理1. 数字电路的基本组成和功能。

2. 数字电路的常用逻辑门及其功能。

3. 数字电路的时序逻辑电路和组合逻辑电路的设计方法。

三、实验仪器与设备1. 数字电路实验箱2. 数字万用表3. 移动电源4. 实验指导书5. 计算器四、实验内容与步骤(一)实验内容1. 逻辑门电路实验2. 组合逻辑电路实验3. 时序逻辑电路实验(二)实验步骤1. 逻辑门电路实验(1)熟悉实验箱的各个功能模块。

(2)搭建简单的逻辑门电路,如与门、或门、非门等。

(3)验证电路功能,并观察输出波形。

(4)记录实验数据,分析实验结果。

2. 组合逻辑电路实验(1)根据实验要求,设计组合逻辑电路。

(2)搭建电路,连接实验箱各个模块。

(3)输入不同的输入信号,观察输出波形。

(4)记录实验数据,分析实验结果。

3. 时序逻辑电路实验(1)熟悉时序逻辑电路的基本原理。

(2)搭建简单的时序逻辑电路,如计数器、寄存器等。

(3)观察电路状态变化,分析电路功能。

(4)记录实验数据,分析实验结果。

五、实验结果与分析(一)实验结果1. 逻辑门电路实验结果2. 组合逻辑电路实验结果3. 时序逻辑电路实验结果(二)实验分析1. 分析实验数据,验证实验原理的正确性。

2. 分析实验过程中遇到的问题及解决方法。

3. 总结实验经验,提出改进建议。

六、实验结论1. 通过本次实验,掌握了数字电路的基本组成和原理。

2. 提高了数字电路的实验技能和设计能力。

3. 对数字电路在现代社会中的应用有了更深入的了解。

七、实验心得体会1. 总结实验过程中的收获和不足。

北京理工大学-数据结构实验报告-实验四--图书管理系统

北京理工大学-数据结构实验报告-实验四--图书管理系统

实验四图书管理系统姓名:任子龙学号:1120140167 班级:05111451一。

需求分析(1)问题描述有一个小型书库保管了大量图书,关于图书有大量信息需要处理,这些信息包括图书的分类、书名、作者名、购买日期、价格等。

现要求编写一个程序以便于对图书的管理。

(2)基本要求:a.建立图书信息.b.提供查找功能,按照多种关键字查找需要的书籍。

例如按书名查找,输入书名后,将显示出该图书的所有信息,或显示指定信息。

c.提供排序功能,按照多种关键字对所有的书籍进行排序,例如按出版日期进行排序。

d.提供维护功能,可以对图书信息进行添加、修改、删除等功能。

(3)数据结构与算法分析将每一本书看作是一个基本单元。

由于涉及添加、修改操作,这里使用了链表作为数据存储结构;同时,考虑到排序功能,尝试使用双向链表。

其中,每本书作为一个结点,数据域包含char 型变量,指针域含有左右指针left和right。

二.概要设计1。

抽象数据类型的定义为实现上述功能,程序中使用了双向链表,只需要定义一种数据类型:typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;注意结点的指针域有left和right两个。

2.本程序包含两个模块(1)主程序模块主函数只包含了Menu_select()函数。

目的是进入主菜单界面,进行功能选择;直到输入操作码0,退出系统;(2)双向链表单元模块——实现书籍信息的链式存储的抽象数据类型.各函数之间的调用关系:三。

详细设计1。

结点类型typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;2.子函数(1)功能菜单调用函数Menu_select()使用户进入主菜单界面,进行功能选择;先进入无限循环,输入操作码进行系统管理工作,直到输入操作码0,退出系统;(2)各种功能函数Initialize()//初始化图书系统信息;Insert()//添加新的图书信息;Sort()//对图书进行排序,本程序可以实现按“图书编号”、“出版日期"、“图书价格”多种关键字进行排序;Search()//实现对图书的查找功能,本程序可以实现按“图书编号"、“出版日期”、“图书价格”多种关键字进行查找;deletebook()//删除无效的图书信息;Print_book()//打印全部图书信息。

北京理工大学《数据结构与算法设计》实验报告实验四

北京理工大学《数据结构与算法设计》实验报告实验四

《数据结构与算法设计》实验报告——实验四学院:班级:学号:姓名:一、实验目的1.通过实验实践、巩固线性表的相关操作; 2.熟悉VC 环境,加强编程、调试的练习; 3.用C 语言实现线性表的抽象数据类型,实现线性表构造、插入、取数据等基本操作; 4. 理论知识与实际问题相结合,利用上述基本操作实现三种排序并输出。

二、实验内容从键盘输入10个数,编程实现分别用插入排序、交换排序、选择排序算法进行排序,输出排序后的序列。

三、程序设计1、概要设计为了实现排序的功能,需要将输入的数字放入线性表中,进行进一步的排序操作。

(1)抽象数据类型:ADT SqList{数据对象:D={|,1,2,,,0}i i a a ElemSet i n n ∈=≥数据关系:R1=11{,|,,1,2,,}i ii i a a a a D i n --<>∈= 基本操作:InPut(SqList &L)操作结果:构造一个线性表L 。

OutPut(SqList L)初始条件:线性表L 已存在。

操作结果:按顺序在屏幕上输出L 的数据元素。

InsertSort(SqList &L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行插入排序。

QuickSort(SqList &L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行快速排序。

SelectSort(SqList &L)初始条件:线性表L 已存在。

操作结果:对L 的数据元素进行选择排序。

}ADT SqList⑵主程序流程由主程序首先调用InPut(L)函数创建顺序表,调用InsertSort(L)函数进行插入排序,调用OutPut(L)函数显示排序结果。

调用QuickSort(L)函数进行交换排序,调用OutPut(L)函数显示排序结果。

调用SelectSort(L)函数进行选择排序,调用OutPut(L)函数显示排序结果。

数字系统设计 实验报告

数字系统设计 实验报告

数字系统设计实验报告1. 引言数字系统设计是计算机科学与工程中的重要领域之一。

本实验旨在通过设计一个基本的数字系统,深入理解数字系统的原理和设计过程。

本文将按照以下步骤详细介绍实验的设计和实施。

2. 实验目标本实验旨在设计一个简单的数字系统,包括输入、处理和输出三个模块。

具体目标如下: - 设计一个输入模块,用于接收用户的输入数据。

- 设计一个处理模块,对输入数据进行特定的处理。

- 设计一个输出模块,将处理结果展示给用户。

3. 实验设计3.1 输入模块设计输入模块主要用于接收用户的输入数据,并将其传递给处理模块进行处理。

在本实验中,我们选择使用键盘作为输入设备。

具体设计步骤如下: 1. 初始化输入设备,确保能够正确接收用户输入。

2. 设计输入缓冲区,用于存储用户输入的数据。

3. 实现输入函数,将用户输入的数据存储到输入缓冲区中。

3.2 处理模块设计处理模块是数字系统的核心部分,负责对输入数据进行特定的处理。

在本实验中,我们选择设计一个简单的加法器作为处理模块。

具体设计步骤如下: 1. 定义输入数据的格式和表示方法。

2. 实现加法器的逻辑电路,可以通过使用逻辑门和触发器等基本组件来完成。

3. 设计加法器的控制电路,用于控制加法器的运算过程。

4. 验证加法器的正确性,可以通过给定一些输入数据进行测试。

3.3 输出模块设计输出模块用于将处理结果展示给用户。

在本实验中,我们选择使用显示器作为输出设备。

具体设计步骤如下: 1. 初始化输出设备,确保能够正确显示处理结果。

2. 设计输出缓冲区,用于存储待显示的数据。

3. 实现输出函数,将输出数据从输出缓冲区中传输到显示器上。

4. 实验实施4.1 输入模块实施根据3.1节中的设计步骤,我们首先初始化输入设备,然后设计输入缓冲区,并实现相应的输入函数。

4.2 处理模块实施根据3.2节中的设计步骤,我们定义输入数据的格式和表示方法,然后实现加法器的逻辑电路和控制电路。

北京理工大学数字数电路课程设计交通灯控制器预习报告总结计划.docx

北京理工大学数字数电路课程设计交通灯控制器预习报告总结计划.docx

....本科实验报告实验名称:交通灯控制器课程名实验时课程设计 II(数字电路)第19周称:间:任课教实验地张延军4-333师:点:实验教田东□ 原理验证师:实验类■ 综合设计学生姓型:倪正超□ 自主创新名:学号/班组112013379730011302级:号:学同组搭徐特立学院院:档:专徐特立英才班成业:绩:课程设计 II ——交通灯控制器一、实验目的1.巩固所学《数字电路与系统设计》知识,学习数字系统设计方法;2.用中小规模集成电路设计、安装、调试一个小型数字控制系统:交通灯控制器;3.使用 MULTISIM 对所设计系统进行仿真;4.掌握数字系统的调试方法:应该学会用示波器来进行测试。

二、实验原理1.数字系统的概念数字系统是指对数字信息进行存储、传输、处理的电子系统。

它的输入和输出都是数字量。

通常把门电路、触发器等称为逻辑器件;将由逻辑器件构成,能执行某单一功能的电路,如计数器、译码器、加法器等,称为逻辑功能部件;把由逻辑功能部件组成的能实现复杂功能的数字电路称数字系统。

数字系和功能部件之的区之一在于功能是否一。

一个存器尽管模很大,可以达到数兆甚至 G 字,但因其功能一,只能算是部件;而由几片 MSI 构成的交通灯控制器却可称系。

数字系和功能部件之的区之二在于是否包含控制路。

一个数字路,无其模大小,只有在具有控制路的情况下才能称之系。

2.数字模与数字系的思路——自向下的方法自向下的方法是从整体系功能出,按一定原将系划分若干子系,再将每个子系分若干功能,再将每个模分成若干小的模⋯⋯直至分成多基本模。

《数字路与系》程中我接触到的数字模有:多路器、器、数器、移位寄存器、状机等等。

一个数字系可看成由若干数字模成的。

行可以先将系分解若干个子系(模),每个子系完成某一功能。

将每个子系完后,再由子系构成整个系。

仿真、安装、可逐个模行,再将它接起来行。

3.交通灯控制器的原理(1)交通灯功能概述交通灯示意如下所示,其中感器的作用判断支路是否有通(或等候),若支路无,主路灯常亮。

北京理工大学数字系统与设计实验报告

北京理工大学数字系统与设计实验报告

本科实验报告实验名称:数字系统设计与实验(软件部分)实验一QuartusII 9.1软件的使用一、实验目的1、通过实现简单组合逻辑电路,掌握QUARTUSII 9.1软件的使用;2、编程实现3-8译码电路以掌握VHDL组合逻辑的设计以及QUARTUSII 9.1软件的使用。

;二、实验内容1、3-8译码电路VHDL组合逻辑的设计A、3-8译码电路真值表B、功能仿真波形图:C、时序仿真波形图:D、VHDL代码library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity decoder3_8 isport(en:in std_logic;sel:in std_logic_vector(2 downto 0);qout:out std_logic_vector(7 downto 0)); end decoder3_8;architecture beha of decoder3_8 issignal sina_in:std_logic_vector(2 downto 0); signal sina_out:std_logic_vector(7 downto 0);beginsina_in<=sel;process(sina_in,en)beginif(en='0')thencase sina_in iswhen"000"=>sina_out<="00000001";when"001"=>sina_out<="00000010";when"010"=>sina_out<="00000100";when"011"=>sina_out<="00001000";when"100"=>sina_out<="00010000"; when"101"=>sina_out<="00100000"; when"110"=>sina_out<="01000000"; when"111"=>sina_out<="10000000"; when others=>sina_out<="00000000"; end case; end if; qout<=sina_out; end process; end beha;2、共阳极七段译码器VHDL 组合逻辑的设计A 、共阳极七段译码器管脚分布及电路结构abcdefg如下如所示:显示0时,a,b,c,d,e,f 管脚接低电平,g 管脚接高电平点亮的二极管会显示数字0 。

北京理工大学 数据结构 实验报告 实验二 简易计算器

北京理工大学 数据结构 实验报告 实验二  简易计算器

实验二简易计算器姓名:任子龙学号:1120140167 班级:05111451一.需求分析1.程序要求可对一实数算术表达式进行简单的数学运算,可以识别带+、-、*、/、%、^(乘方)等等运算符及括号的中缀表达式,从键盘上输入一算术表达式(一般为中缀表达式),计算出表达式的值。

2.按照四则运算规则,求表达式的值。

一般规则如下:1)先括号内,再括号外。

2)先乘方,再乘除,后加减。

b.同级运算从左到右顺序执行。

3.有良好的提示信息,引导用户在键盘上输入规定的运算指令;如表达式有误,也应给出相应的提示信息。

4.建立两个工作栈,分别保存运算符,操作数或运算结果。

二.概要设计1.抽象数据类型的定义为实现上述功能,建立两个工作栈;算符为字符型变量,算数为单精度浮点型变量,则需要定义两种数据类型分别存储。

typedef struct StackChar{char c;struct StackChar*next;}SC;typedef struct StackFloat{float f;}SF;2.本程序包含两个模块(1)主程序模块主函数只包含了输入输出部分。

流程为:首先输入算式,然后调用算符优先算法函数EvaluateExpression(s)进行计算,结果输出;然后循环下去,直到输入OUT指令,退出程序;(2)链栈单元模块——实现栈的链式存储的抽象数据类型。

各函数之间的调用关系:三.详细设计1.结点类型typedef struct StackChar{char c;struct StackChar*next;}SC;float f;struct StackFloat*next;}SF;2.子函数(1)算符优先算法的主干函数float EvaluateExpression(char*e)实现算符优先算法主干的函数。

首先判断是算符还是算数,如果是算符,与算符栈栈顶元素进行优先级比较,如果该算符优先级比原栈顶元素优先级高,则进栈,否则进行运算;如果是算数,则入算数栈。

北京理工大学数据结构实验报告 简易计算器(二叉树)

北京理工大学数据结构实验报告 简易计算器(二叉树)

数据结构实验报告三——简易计算器(二叉树)姓名:任子龙学号:1120140167 班级:05111451一、需求分析(1)问题描述由键盘输入一算术表达式,以中缀形式输入,试编写程序将中缀表达式转换成一棵二叉表达式树,通过对该二叉树的后序遍历求出计算表达式的值。

(2)基本要求a.要求对输入的表达式能判断出是否合法,不合法要有错误提示信息。

b.将中缀表达式转换成二叉表达式树。

c.后序遍历求出表达式的值。

(3)数据结构与算法分析一棵表达式树,它的树叶是操作数,如常量或变量名字,而其他的结点为操作符。

a.建立表达式树。

二叉树的存储可以用顺序存储也可用链式存储。

当要创建二叉树时,先从表达式尾部向前搜索,找到第一个优先级最低的运算符,建立以这个运算符为数据元素的根结点。

注意到表达式中此运算符的左边部分对应的二叉绔为根结点的左子树,右边部分对应的是二叉绔为根结点的右子树,根据地这一点,可用递归调用自己来完成对左右子树的构造。

b.求表达式的值。

求值时同样可以采用递归的思想,对表达式进行后序遍历。

先递归调用自己计算左子树所代表的表达式的值,再递归调用自己计算右子树代表的表达式的值,最后读取根结点中的运算符,以刚才得到的左右子树的结果作为操作数加以计算,得到最终结果。

(4)测试a.加减运算输入:6+9-5 输出:10b.乘除运算输入:5.6*2.7/2 输出:7.56c.四则混合运算输入:(2+3)*8-3/2 输出:23.5d.非法输入输入:(5+6(*5 输出:括号不匹配!1.2问题分析与之前利用栈实现计算器功能不同,本实验采取的方法是:将中缀表达式转换成一棵二叉表达式树,通过对该树的后序遍历求出计算表达式的值。

所以,实验的重点是如何“将中缀表达式转换成一棵二叉表达式树”;如上图所示,该二叉表达式树表示的是计算式(5+2)*3。

可以看出,操作数均为叶子结点,其它结点为操作符;构建二叉树的整体思路是:(1)将中缀表达式转化为后缀表达式;(2)利用(1)中的后缀表达式,在此基础上构建二叉表达式树。

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

3、仿真结果 功能仿真设置:
功能仿真结果: (1)总体仿真结果
(2)reset 高有效和二分频仿真结果
(3)四分频仿真结果
(4)八分频仿真结果
(5)十六分频仿真结果
四、实验心得
通过本次实验,设计频率可选的模十状态机以及 7 段译码电路,学会了以代码 形式实现频率多路选择器的功能,巩固了模十状态机的实现方式,进一步掌握 VerilogHDL 硬件描述语言。
功能仿真结果:
时序仿真设置:
时序仿真结果:
2、 3—8 译码器 (1)设计思路 随着时钟信号 clk 上升沿的到来,输入 D2D1D0 从 000 加到 111,每个输入 D2D1D0 对应着一个输出 Q7Q6Q5Q4Q3Q2Q1Q0,对应关系如真值表所示:
输入 D2 0 0 0 0 1 1 1 1 D1 0 0 1 1 0 0 1 1 D0 0 1 0 1 0 1 0 1 Q7 0 0 0 0 0 0 0 1 Q6 0 0 0 0 0 0 1 0 Q5 0 0 0 0 0 1 0 0 Q4 0 0 0 0 1 0 0 0
seg <= 7'b0011001; 5: seg <= 7'b0010010; 6: seg <= 7'b0000010; 7: seg <= 7'b1111000; 8: seg <= 7'b0000000; 9: seg <= 7'b0010000; default: seg <= 7'b0001000; endcase end endmodule (2)功能图
三、设计与实现
1、设计思路 (1) 、时钟信号 clk 作为分频器的输入,分频器的设计思路为设计一个模十六计 数器,cp0(Q0)输出即为二分频信号,cp1(Q1)输出即为四分频信号,cp2(Q2) 输出即为八分频信号,cp3(Q3)输出即为十六分频信号。分频器的输出由 4 选 1 多 路选择器的选择输入端 select 选择 2 分频、4 分频、 8 分频和 16 分频其中之一作为状 态机的时钟输入,当 select 为 0 时,输出为二分频信号;为 1 时,输出为四分频信 号;为 2 时,输出为八分频信号;为 3 时,输出为十六分频信号。 (2) 、reset 为高有效,则若 reset 信号为 1 时,qout 置为 0,则 now_state 为 0。 若 reset 信号为 0 时, qout 自加,并作为状态机的输入 驱动,让状态机按照 0->2->5->6->1->9->4->8->7->3->0 的顺序输出。 (3) 、状态机按照 0->2->5->6->1->9->4->8->7->3->0 的顺序输出,并使用此输出 作为驱动输入到 7 段译码器的显示逻辑。
always @ (D) begin case (D) 0: Q <= 8'b00000001; 1: Q<= 8'b00000010; 2: Q <= 8'b00000100; 3: Q<= 8'b00001000; 4: Q <= 8'b00010000; 5: Q<= 8'b00100000; 6: Q <= 8'b01000000; 7: Q <= 8'b10000000; default: Q <= 8'b11111111; endcase end endmodule
实验三 数字钟的设计与仿真
一、实验目的:
通过设计实现的数字钟的设计与仿真,以熟悉 VerilogHDห้องสมุดไป่ตู้ 语言编程。
二、实验流程:
输入引脚有 3+16 根, 其中三位分别为时钟 (提供整个系统的时钟信号) 、 复位 (系 统复位信号)和置位信号(用于将时间设置到需要观察的位置) 。十六位分别为分钟 个位和十位、秒个位和十位。 输出引脚有 16 根,分别位分钟个位和十位、秒个位和十位。
实验一 QuartusII9.1 软件的使用
一、实验目的:
1、通过实现书上的例子,掌握 QUARTUSII9.1 软件的使用; 2 、 编 程 实 现 3-8 译 码 电 路 以 掌 握 VerilogHDL 语 言 组 合 逻 辑 的 设 计 以 及 QUARTUSII9.1 软件的使用。
二、实验步骤
case (qout) 0: seg<=7'b1000000; 1: seg<=7'b0100100; 2: seg<=7'b0010010; 3: seg<=7'b0000010; 4: seg<=7'b1111001; 5: seg<=7'b0010000; 6: seg<=7'b0011001; 7: seg<=7'b0000000; 8: seg<=7'b1111000; 9: seg<=7'b0110000; default: seg<=7'b1111111; endcase endmodule
(3)操作步骤: (一)建立 Verilog HDL 文件 1、先建立一个工作目录文件 2、创建一个新项目:
对项目进行命名:
参数如下:
确定无误后,点击 Finish
3、新建文件 点击 File—>New,淡出对话框后选择 Verilog HDL File,然后进行编写代码。 (二)全编译与功能仿真 1、对 Verilog HDL File 编译: 从菜单栏中选择 Processing-Start-Start Analysis&Synthesis,选取菜单中 Processing -Start Compilation 进行全编译。 2、指定功能仿真模式
(3)操作步骤简要: ①建立新设计项目 ②文本设计输入:输入程序代码 ③设计项目的编译:编译输入好的代码段 ④仿真: 功能仿真设置:
功能仿真结果:
时序仿真设置:
时序仿真结果:
三、实验心得
通过实验一的学习,我初步掌握了 QUARTUSII9.1 软件的使用方法,并独立编程 实现 3-8 译码电路以掌握 VerilogHDL 语言组合逻辑的设计,对 QUARTUSII9.1 软件的 使用更加熟练。第一天的学习为后两次实验的进行奠定基础。掌握了 always 和 if、 case 的用法。
实验二
一、实验目的:
模十状态机与 7 段译码器显示
通过设计频率可选的模十状态机以及 7 段译码电路以进一步掌握 VerilogHDL 硬 件描述语言。
二、实验流程:
本设计有分频器、多路选择器、状态机和译码器。 时钟输入作为分频器的输入,输出时钟分别为 2 分频、4 分频、8 分频和 16 分频; 四个频率的时钟信号由 4 选 1 的多路选择器选择其中之一作为状态机的时钟输入; 使用选中的时钟频率作为输入驱动状态机按照以下的次序输出: 0->2->5->6->1->9->4->8->7->3->0 的顺序输出; 使用此输出作为驱动输入到 7 段译码器的显示逻辑。
三、设计与实现
1、设计思路与分析: 本实验设计数字钟的实质为设计 60*60 的计数器。数字钟为上升沿触发,三个 输入管脚为提供整个系统的时钟信号 clk, 系统复位信号 clr (高有效) 和置位信号 load (高有效) , 复位信号 clr 用于将输出的分钟个位 min_l、 十位 min_h 和秒个位 sec_l、 十位 sec_h 清 0, 置位信号 load 将输出的分钟个位 min_l、 十位 min_h 和秒个位 sec_l、 十位 sec_h 设置到需要观察的位置。十六位分别为分钟个位 min_l0、十位 min_h0 和 秒个位 sec_l0、十位 sec_h0,为 load 信号变为高电平时的预置信号,此时输出结果 为预置信号。在 load=0,clr=0 时,随着 clk 的上升沿到来,秒个位 sec_l 进行自加, 加到 9 时下一个 clk 上升沿到来时秒个位 sec_l 变为 0,sec_h 加 1。当时钟为 59 秒 是, 下一个 clk 上升沿到来时, 秒清 0, 分钟低位 min_l 加 1。 当时钟为 9 分 59 秒时, 下一个 clk 上升沿到来时,分钟低位 min_l,秒高位 sec_h,秒低位 sec_l 清 0,分钟高 位 min_h 加 1。 当时钟为 59 分 59 秒是, 下一个 clk 上升沿到来时,分钟个位 min_l、 十位 min_h 和秒个位 sec_l、十位 sec_h 均清 0。 2、实验代码
2、实验代码
module countten ( input [1:0]select, input clk,reset, output reg [3:0]cp, output reg [6:0]seg, output reg fp, output reg [9:0]now_state );
reg [3:0]qout; always @ (posedge clk or posedge reset)begin if (reset) cp<=0; else cp<=cp+1; end always @(select) case(select) 0:fp<=cp[0]; 1:fp<=cp[1]; 2:fp<=cp[2]; 3:fp<=cp[3]; default:fp<=0; endcase always@(posedge fp or posedge reset)begin if (reset) qout<=0; else if (qout==4'b1001) qout<=4'b0000; else qout<=qout+1; end always @(qout) case (qout) 0: now_state<=10'b0000000001; 1: now_state<=10'b0000000100; 2: now_state<=10'b0000100000; 3: now_state<=10'b0001000000; 4: now_state<=10'b0000000010; 5: now_state<=10'b1000000000; 6: now_state<=10'b0000010000; 7: now_state<=10'b0100000000; 8: now_state<=10'b0010000000; 9: now_state<=10'b0000001000; default: now_state<=10'b1111111111; endcase always @(qout)
相关文档
最新文档