实验一DSP的常用指令实验
- 格式:docx
- 大小:9.97 KB
- 文档页数:3
dsp实验注释实验一:简单指令程序运行实验代码(含注释):.mmregs.global _main_main:stm #3000h,sp ;sp为堆栈指针寄存器,stm为存储器映射寄存器寻址ssbx xf ;xf赋值为1,灯亮call delay ;调用delay函数,延迟0.5秒rsbx xf ;xf赋值为0,灯灭call delay ;调用delay函数b _main ;无条件调用_main函数nopnop;delay .5 second ;延时5秒delay:stm 270fh,ar3 ;ar3赋值207fh,十进制为9999dloop1:stm 0f9h,ar4 ;ar4赋值0f9h,十进制为249dloop2:banz loop2,*ar4- ;若不为0,ar4减1banz loop1,*ar3- ;若不为0,ar3减1,共进行10000*250次跳转retnopnop.end实验操作:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF 灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁。
实验二:资料存储实验本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA 的数值,然后读出,并存储到0X1008开始的8个地址空间。
在CCS 中可以观察DATA内存空间地址0X1000~0X100F值的变化。
代码(含注释):.mmregs.global _main_main:;store data ;存储数据stm 1000h,ar1 ;将立即数1000h送入辅助寄存器ar1 (内存地址) rpt #07h ;循环执行下一条指令,8次st 0aaaah,*ar1+ ;将立即数0xaaaah赋给辅助寄存器ar1的1000h地址内,;之后ar1的地址加1,8次;ar1的地址变1008,内存0x1000-- ox1007中的数据均为0xaaaah;read data then re-store ;读入数据重新存储stm 7h,ar3 ;令辅助寄存器ar3的初值为07hstm 1000h,ar1 ;重新将立即数1000h送入辅助寄存器ar1stm 1008h,ar2 ;将立即数1008h送入辅助寄存器ar2loop: ;进入循环ld *ar1+,t ;将辅助寄存器ar1的值0xaaaah存入T寄存器中,且ar1的地址加1 st t,*ar2+ ;将T寄存器内容0xaaaah存入辅助寄存器ar2 ,并且ar2的地址加1 banz l oop,*ar3- ;寄存器ar3的值不为0时,执行循环loop,ar3的地址值减1直至为0时退出循环here:b here.end ;结束(地址0x1000-- 0x100F,程序完成对16个内存单元赋值)实验操作:1.用“View”下拉菜单中的“Memory”查看内存单元;2.输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H;3.查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序;4.单击“Halt”暂停程序运行;5.查看0x1000H~0x100FH单元内数值的变化;6.关闭各窗口,本实验完毕。
北京邮电大学电子工程学院电子实验中心<数字信号处理实验>实验报告班级: xxx学院: xxx实验室: xxx 审阅教师:姓名(班内序号): xxx 学号: xxx 实验时间: xxx评定成绩:目录一、常规实验 (3)实验一常用指令实验 (3)1.试验现象 (3)2.程序代码 (3)3.工作原理 (3)实验二数据储存实验 (4)1.试验现象 (4)2.程序代码 (4)3.工作原理 (4)实验三I/O实验 (5)1.试验现象 (5)2.程序代码 (5)3.工作原理 (5)实验四定时器实验 (5)1.试验现象 (5)2.程序代码 (6)3.工作原理 (9)实验五INT2中断实验 (9)1.试验现象 (9)2.程序代码 (9)3.工作原理 (13)实验六A/D转换实验 (13)1.试验现象 (13)2.程序代码 (14)3.工作原理 (18)实验七D/A转换实验 (19)1.试验现象 (19)2.程序代码 (19)3.工作原理 (37)二、算法实验 (38)实验一快速傅里叶变换(FFT)算法实验 (38)1.试验现象 (38)2.程序代码 (38)3.工作原理 (42)实验二有限冲击响应滤波器(FIR)算法实验 (42)1.试验现象 (42)2.程序代码 (42)3.工作原理 (49)实验三无限冲击响应滤波器(IIR)算法实验 (49)1.试验现象 (49)2.程序代码 (49)3.工作原理 (56)作业设计高通滤波器 (56)1.设计思路 (56)2.程序代码 (57)3.试验现象 (64)一、常规实验实验一常用指令实验1.试验现象可以观察到实验箱CPLD右上方的D3按一定频率闪烁。
2.程序代码.mmregs.global _main_main:stm #3000h,spssbx xf ;将XF置1,D3熄灭call delay ;调用延时子程序,延时rsbx xf ;将XF置0,D3点亮call delay ;调用延时子程序,b _main ;程序跳转到"_MAIN"nopnop;延时子程序delay:stm 270fh,ar3 ;将0x270f(9999)存入ar3loop1:stm 0f9h,ar4 ;将0x0f9(249)存入ar4loop2:banz loop2,*ar4- ;*ar4自减1,不为0时跳到loop2的位置banz loop1,*ar3- ;*ar3自减1,不为0时跳到loop1的位置ret ;可选择延迟的返回nopnop.end3.工作原理主程序循环执行:D3熄灭→延时→D3点亮→延时。
姓名:班级:自动化15 学号:2015实验一数据存储实验一实验目的1。
掌握TMS320F2812程序空间的分配;2。
掌握TMS320F2812数据空间的分配;3。
能够熟练运用TMS320F2812数据空间的指令。
二实验步骤与内容实验步骤1.在进行DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示:2.F2812CPU板的JUMP1的1和2脚短接,拨码开关SW1的第二位置ON;其余OFF3.E300底板的开关SW4的第2位置ON,其余位置OFF.其余开关设置为OFF.4.上电复位在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的指示灯应点亮,否则DSP开发系统与计算机连接存在问题。
5.运行CCS程序1)待计算机启动成功后,实验箱220V电源置“ON",实验箱上电2)启动CCS5.5,工作环境的路径选择:E:\E300Program\E300TechV-2812\normal ;6.成功运行CCS5.5程序后,出现如下图所示界面:7.右键点击Project Explorer窗口下的工程文件“e300_01_mem”,选择“Open Project"命令打开该工程,如下图所示,可以双击才看左侧源文件;8.点击菜单栏Project/Build All命令编译整个工程,编译完成后点击按钮进入仿真模式,完全进入后如下图所示:9.用“View"下拉菜单中的“Memory/Browser”查看内存单元,参数设置如下图:注意:下面的参数设置都是以16进制。
此时可以观测到以0x003F9020为起始地址的存储单元内的数据;10.单击按钮,开始运行程序,一段时间后,单击按钮,停止程序运行,0x003F9020H~ 0x3F902FH单元的数据的变化,如下图所示:11.关闭Memory Browser窗口,点击按钮,退出仿真模式。
实验一DSP指令实验实验目的:了解DSP的结构及管脚功能(请参阅TMS320C5000系列原理说明书)掌握DSP的基本指令实验要求:让学生了解怎样连接对DSP进行简单的编程操作,运算控制等基本汇编语言及算术语言实验测试及除错验证。
实验说明:DSP指令实验,主要是对54系列DSP一个基本的了解实验,主要是熟悉54系列的语句、了解54系列DSP的基本框架、了解DSP的特征。
该实验所需硬件主要是TMS320C5402DSP芯片,以及发光二极管等有可观性电路。
实验过程是:让学生了解怎样连接对DSP进行简单的编程操作,运算控制等基本汇编语言及算术语言实验测试及除错验证。
实验步骤:安装CCS的Simulator方式:双击桌面上的Setup CCS C5000 图标,关闭Import Configuration 窗口,在System Configuration中的My System的下面可看到一个类似板卡的图标,如果该图标的名称是“tisim54x”的话,就可直接关闭该窗口,不存盘退出。
如果该图标的名称不是“tisim54x”的话,在该图标上点击右键,选择remove删除该结构,然后在Available Board Types中双击“tisim54x”的图标(如果有的话),弹出Board Properties的对话框点击“next”、“finish”然后关闭Code Composer Setup窗口,存盘退出即可。
如果在Available Board Types中没有“tisim54x”的图标,则在右边框内单击“Install a Device Driver”,在路径“c:\ti\driver\”中打开tisim54x.dvr 文件,在Available Board Types中可看到“tisim54x”的图标,然后按上述操作。
即生成CCS 的Simulator方式。
1、以Simulator方式启动CCS,在[Project]-[Open]菜单中打开ex1.mak;2、在左边树状列表框内双击[Project]展开目录树,双击[ex1.asm]打开源程序文件(或者打开自己编写的程序),参考程序中的注释仔细阅读源程序;3、在[Project]-[Build]菜单中编译项目文件,编译成功后在下端的状态窗口中显示Build Complete,0 Errors,0 Warnings;4、在[File]-[Load Programm]中加载输出执行代码文件ex1.out,此时,反汇编窗口将显示在前端,当前PC指针为0000:0080(黄色高亮显示),指令代码将以汇编语言方式显示,可以在反汇编窗口中点击鼠标右键,在弹出菜单中选择[Properties]-[Dis-Assembly Options]打开反汇编选项对话框,在[Dis-Assembly Style]选项中选择[Algebraic],以算术语言方式显示指令代码(注意:此时可能标号显示异常,按PageUP再按PageDown即可刷新显示);5、选择[View]-[CPU Registers]-[CPU Register](或点击左边工具栏的快捷按钮)打开处理器映射寄存器窗口;6、选择[View]-[Memory](或点击左边工具栏的快捷按钮),在弹出的[Windows Memory Options]对话框的Address文本框中输入0x0200,Page下拉框中选中Data,确定后将打开数据存储器查询窗口,此时数据存储器地址0x0200~0x0203将对应ex1.asm中声明的标号DAT0~DAT3;7、调整[Dis-Assembly][memory][CPU Registers]三个窗口的大小,以便于观察;8、依次把光标移动到反汇编窗口中标号为bk?(?表示从0开始的整数)的标号行下的指令处,选择菜单[Debug]-[Breakpoint](或者点击快捷按钮)设置断点,断点设置后,都将以紫色高亮显示;9、选择[Debug]-[Run](也可以按快捷键F5或点击快捷按钮)执行程序;10、程序将在第一个断点bk0处停止,bk0标号下的指令将以半黄半紫高亮显示,在处理器映射寄存器窗口和数据存储器查询窗口中双击相应操作数的内容,即可进行修改(注意:如步骤6所述,DAT0~DAT3对应地址为0X0200~0X0203),试修改下一条指令操作数的内容,然后按F5执行程序,再在处理器映射寄存器窗口中或数据存储器查询窗口中观察指令执行结果;11、重复执行9、10步骤,依次观察加法指令、减法指令、乘法指令、除法指令、平方指令以及3数累加宏指令的执行结果;12、上指令执行完毕后,程序转到bk0处,可再次进行熟悉运算控制的实验。
北京联合大学智慧城市学院实验报告课程名称:DSP 技术与应用实验名称: CCS设置和常用指令班级:通信14姓名学号:2017 年 10 月 21 日实验一 CCS 设置和常用指令一、实验目的熟悉CSS设置方法;会建立汇编语言源文件;会建立工程项目;会将文件加入到工程;会使用汇编、链接命令;会加载、运行程序。
二、实验内容1、编写汇编语言常用的装入和存储指令、算术指令、逻辑指令、程序控制指令50句。
2、使用汇编命令检查所编写的汇编语言源语句格式是否正确,如果有错误则找出并改正,直到没有错误为止。
三、实验设备每组PC 机一台;CCS-DSP 集成开发环境。
四、实验步骤1)CCS 设置及源文件编写、汇编、链接、加载、运行过程1、仿真器驱动的安装2、打开CCS,双击Setup CCS 环境设置3、连接试验箱系统4、建立新工程Project New5、建立新文件,编写源文件、链接命令文件6、加新建的文件到项目7、汇编源、链接文件8、加载、运行程序2)编写常用汇编语言指令装入和存储指令、算术指令、逻辑指令、程序控制指令共计50 句。
使用汇编命令菜单Project-Compile file,检查语句,如果有错误改正之,直到汇编没有错误为止。
五、实验报告1、CCS 工作环境设置过程:要有截图和说明。
新建工程并建立工作区建立ASM文件并保存2、编写的汇编语言语句和程序,要有截图。
3、汇编、链接、运行的结果:要有截图和说明。
4、实验结论通过本次实验,我熟悉了CCS的集成开发环境和运行环境,同时熟悉了CSS设置方法,在编译器里面进行源文件的编写,将文件添加到工程,最后经行加载、运行程序。
今天的这次实验让我对DSP的汇编语言有了更深一步的了解,在编译的过程中,我们组遇到了很多问题,但是最后通过查书和其他组的帮助,将问题一一解决。
及时地完成了任务。
附录:SUBB 1,B;从累加器中减去带借位减操作数DELAY 16;储存器单元延迟ADDC 1000h,A;带进位的加法SUBC 1000h,A;有条件减法SQUR 1000h,A;1000位置的数字的平方加到累加器A中DADD 12,A;双精度12加到累加器AADD 1H,A ; 操作数1加至累加器AADD 2H,2,A ; 操作数2移位后加至累加器AABS A;取绝对值CMPL A;累加器取反EXP A;求累加器中数据的指数MAX A;求累加器A最大值MIN B;求累加器B最小值NORM A;归一化SAT A;累加器饱和运算SUB #30,A;从累加器中减去30ADD #10,B;10加到累加器BMPY #20,A;20和累加器相乘MAC #10,#40,A;10和40相乘放到累加器A中SUB 3,A ;从累加器A中减去操作数3ROR B;累加器B经过进位位循环右移OR #1,B;1和累加器B相或XOR 10,A;10和累加器相异或RETE;开中断,从中断返回RETF;开中断,从中断快速返回ROL A;累加器A经过进位位循环左移SFTC A;累加器A条件移位BITT 1;测试由T寄存器指定的位AND 14,A ;操作数14与累加器A相与AND #1,A;1与累加A相与CMPM 1,#1k;储存单元与长立即数比较BACC A;按累加器规定地址转移PSHD 1;将1压入堆栈CALA A;按累加器的地址调子程序RPT #10;重复执行下调指令11次FRAME 1;堆栈指针偏移一个立即数值LD 31,16,A ;操作数左移16位后加载至累加器。
DSP实验一:常用指令及数据存储实验一、实验目的1、了解DSP开发系统的组成和结构;2、熟悉DSP开发系统的连接;3、熟悉CCS的开发界面;4、熟悉C54X系列的寻址系统;5、熟悉常用C54X系统指令的用法6、掌握TMS320C54的程序空间和数据空间的分配7、熟悉操作TMS320C54数据空间的指令二、实验设备计算机、CCS2.0版软件,DSP仿真器、实验箱。
三、实验系统相关资源1、DSP芯片引脚XF连接LED5,可通过ssbx,rsbx改变XF的值来控制LED52、系统时钟频率为10MHz3、TMS320VC54存储器分配图四、实验步骤1、用仿真机将计算机与数字信号处理实验箱连接好,并依次打开实验箱电源、仿真机电源,然后运行CCS软件。
2、新建一个工程:点击Project-new,输入项目名Exp1, 并将工程文件保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。
3、编写源程序:3.1 新建一个源文件File-New-Source File,出现文本编辑窗口3.2 复制以下代码到编辑窗口;File Name:exp01.asm;the program is compiled at no autoinitialization mode.mmregs.global _main;声明_main可被其他模块引用,程序加载到目标板后,;会自动跳转到标号为_main的汇编指令STACK: .usect ".stack",10h.text_main:stm #STACK+10h,sp ;设置堆栈指针STM #0, CLKMD ; (to divider mode before setting) TstStatu1:LDM CLKMD, AAND #01b, A ;poll STATUS bitBC TstStatu1, ANEQSTM #0xF7FF, CLKMD ; set C5402 DSP clock to 10MHz loop:ssbx xf ;将XF置1,熄灭LED5call delay ;调用延时子程序,延时rsbx xf ;将XF置0,点亮LED5call delay ;调用延时子程序,b loop ;程序跳转到"loop";延时子程序delay:stm 270fh,ar3 ; 270fh=9999loop1:stm 0f9h,ar4 ; 0f9h=249loop2:banz loop2,*ar4-banz loop1,*ar3-ret.end注意:(1)源代码的书写有一定的格式,每一行代码分为三个区:标号区、指令区和注释区。
实验一C54x常用指令实验一:实验目的1.了解C54x常用的寻址方式2.了解C54x常用的指令3.熟悉C54x汇编程序的编写二:实验原理寻址方式是指指令中操作数的获取方式,熟悉并灵活运用各种寻址方式是学习编写汇编程序的重要环节。
下面简单说明C54x的一些常用寻址方式及其简要说明:1.立即寻址(1)可以对累加器A,B载入立即数。
(2)可以对存储器映射寄存器(MMR: memory-mapped register)载入立即数。
(3)可以对ASM载入立即数,ASM是状态寄存器ST1的(4-0)位。
ASM的取值范围是-16~15。
(4)可以对DP载入立即数,DP是状态寄存器ST0的(8-0)位,作为数据空间直接寻址时的高9位(A15~A7),与指令中包含的低7位地址(A6~A0)结合形成绝对地址。
2.直接寻址方式采用直接寻址方式时,应当注意:当CPL=0时,绝对地址=DP(9)+Offset(7);当CPL=0时,绝对地址=SP(16)+Offset(7);3.间接寻址这种寻址方式利用辅助寄存器ARx(x=0,1,2,3,4,5,6,7)对数据寄存器空间进行访问。
数据空间的地址被存储在ARx当中,ARx加星号(*)前缀表示的是ARx地址所指向的存储器单元。
而且保存在ARx中的地址在存储单元访问前/后可以进行修改,如下所示。
45.绝对寻址:说明(略)6.存储器映像寄存器寻址:说明(略)7.堆栈寻址:说明(略)在本实验中,学生通过自行编写一些程序来了解和熟悉C54x的一些常用指令和数据寻址方式,关于C54x的指令和数据寻址方式的详细介绍,请参考课程讲稿以及T1公司相应的文档。
三:实验内容及步骤1.创建一个新工程创建一个新工程的步骤如下:(1)CCS运行环境设置参考实验一。
(3)运行CCS,在Project菜单中选择New命令,弹出如图1.1所示的ProjectCreation对话框。
设CCS 安装在D:\ti目录下,在Project栏中输入需要创建的工程名字:qinhua1其默认名为*.pjt。
基本D 触发器module DFF(Q,D,CLK);output Q;input D,CLK;reg Q;always @(posedge CLK)beginQ <= D;endendmodule带异步清0、异步置1 的D 触发器module DFF1(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always @(posedge clk or negedge set or negedge reset) beginif (!reset) beginq <= 0; //异步清0,低电平有效qn <= 1;endelse if (!set) beginq <= 1; //异步置1,低电平有效qn <= 0;endelse beginq <= d;qn <= ~d;endendendmodule带同步清0、同步置1 的D 触发器module DFF2(q,qn,d,clk,set,reset);input d,clk,set,reset;output q,qn;reg q,qn;always @(posedge clk)beginif (reset) beginq <= 0; qn <= 1; //同步清0,高电平有效endelse if (set) beginq <=1; qn <=0; //同步置1,高电平有效endelse beginq <= d; qn <= ~d;endendendmodule带异步清0、异步置1 的JK触发器module JK_FF(CLK,J,K,Q,RS,SET);input CLK,J,K,SET,RS;output Q;reg Q;always @(posedge CLK or negedge RS or negedge SET) beginif(!RS) Q <= 1'b0;else if(!SET) Q <= 1'b1;else case({J,K})2'b00 : Q <= Q;2'b01 : Q <= 1'b0;2'b10 : Q <= 1'b1;2'b11 : Q <= ~Q;default: Q<= 1'bx;endcaseendendmodule8-3 优先编码器module encoder8_3(none_on,outcode,a,b,c,d,e,f,g,h); output none_on;output[2:0] outcode;input a,b,c,d,e,f,g,h;reg[3:0] outtemp;assign {none_on,outcode}=outtemp;always @(a or b or c or d or e or f or g or h)beginif(h) outtemp=4'b0111;else if(g) outtemp=4'b0110;else if(f) outtemp=4'b0101;else if(e) outtemp=4'b0100;else if(d) outtemp=4'b0011;else if(c) outtemp=4'b0010;else if(b) outtemp=4'b0001;else if(a) outtemp=4'b0000;else outtemp=4'b1000;endendmodule【例9.8】用函数定义的8-3 优先编码器module code_83(din, dout);input[7:0] din;output[2:0] dout;function[2:0] code; //函数定义input[7:0] din; //函数只有输入端口,输出为函数名本身if (din[7]) code = 3'd7;else if (din[6]) code = 3'd6;else if (din[5]) code = 3'd5;else if (din[4]) code = 3'd4;else if (din[3]) code = 3'd3;else if (din[2]) code = 3'd2;else if (din[1]) code = 3'd1;else code = 3'd0;endfunctionassign dout = code(din); //函数调用endmodule3-8 译码器module decoder_38(out,in);output[7:0] out;input[2:0] in;reg[7:0] out;always @(in)begincase(in)3'd0: out=8'b11111110;3'd1: out=8'b11111101;3'd2: out=8'b11111011;3'd3: out=8'b11110111;3'd4: out=8'b11101111;3'd5: out=8'b11011111;3'd6: out=8'b10111111;3'd7: out=8'b01111111;endcaseendendmodule七段数码管译码器module decode47(a,b,c,d,e,f,g,D3,D2,D1,D0);output a,b,c,d,e,f,g;input D3,D2,D1,D0; //输入的4位BCD码reg a,b,c,d,e,f,g;always @(D3 or D2 or D1 or D0)begincase({D3,D2,D1,D0}) //用case语句进行译码4'd0: {a,b,c,d,e,f,g}=7'b1111110;4'd1: {a,b,c,d,e,f,g}=7'b0110000;4'd2: {a,b,c,d,e,f,g}=7'b1101101;4'd3: {a,b,c,d,e,f,g}=7'b1111001;4'd4: {a,b,c,d,e,f,g}=7'b0110011;4'd5: {a,b,c,d,e,f,g}=7'b1011011;4'd6: {a,b,c,d,e,f,g}=7'b1011111;4'd7: {a,b,c,d,e,f,g}=7'b1110000;4'd8: {a,b,c,d,e,f,g}=7'b1111111;4'd9: {a,b,c,d,e,f,g}=7'b1111011;default: {a,b,c,d,e,f,g}=7'bx;endcaseendendmodule用case语句描述的 4 选1 MUXmodule mux_case(out,in0,in1,in2,in3,sel);output out;input in0,in1,in2,in3;input[1:0] sel;reg out;always @(in0 or in1 or in2 or in3 or sel)begincase(sel)2'b00: out=in0;2'b01: out=in1;2'b10: out=in2;default: out=in3;endcaseendendmodule用if-else语句描述的 4 选 1 MUX module mux_if(out,in0,in1,in2,in3,sel); output out;input in0,in1,in2,in3;input[1:0] sel;reg out;always @(in0 or in1 or in2 or in3 or sel) beginif(sel==2'b00) out=in0;else if(sel==2'b01) out=in1;else if(sel==2'b10) out=in2;else out=in3;endendmodule带置位和复位端的 1 位数据锁存器module latch_2(q,d,clk,set,reset);output q;input d,clk,set,reset;assign q = reset ? 0 : (set ? 1 : (clk ? d : q)); endmodule8 位数据寄存器module reg8(out_data,in_data,clk,clr); output[7:0] out_data;input[7:0] in_data;input clk,clr;reg[7:0] out_data;always @(posedge clk or posedge clr) beginif(clr) out_data <=0;else out_data <=in_data;endendmodule8 位数据锁存器module latch_8(qout,data,clk);output[7:0] qout;input[7:0] data;input clk;reg[7:0] qout;always @(clk or data)beginif (clk) qout<=data;endendmodule8 位移位寄存器module shifter(din,clk,clr,dout);input din,clk,clr;output[7:0] dout;reg[7:0] dout;always @(posedge clk)beginif (clr) dout<= 8'b0; //同步清0,高电平有效elsebegindout <= dout << 1; //输出信号左移一位dout[0] <= din; //输入信号补充到输出信号的最低位endendendmodule4 位串并转换器module serial_pal(clk,reset,en,in,out);input clk,reset,en,in;output[3:0] out;reg[3:0] out;always @(posedge clk)beginif(reset) out<=4'h0;else if(en) out<={out,in}; //使用连接运算符endendmodule8 位全加器module add8(sum,cout,b,a,cin); output[7:0] sum;output cout;input[7:0] a,b;input cin;assign {cout,sum}=a+b+cin; endmodule。
实验二、CCS操作Cmd文件(实验二、三、四)MEMORY{PAGE 0:VECS: org=0x0080, len=0x80PROM: org=0x1000, len=0x1000 /* 4k words */PAGE 1:STACK: org=0x100, len=0x400 /* 1k words */DARAM: org=0x2000, len=0x1000 /* 4k words */}SECTIONS{ .text :> PROM PAGE 0vectors :> VECS PAGE 0.bss :> DARAM PAGE 1.data :> DARAM PAGE 1}S54文件;An example to show how to write an assembly language source file; y=a1*x1+a2*x2;******************************************************************************STACK_ADDR .set 0x0500 ;设置堆栈底端地址;在变量段分配数据,为未初始化的变量保留空间.bss a,2.bss x,2.bss y,1;在数据段分配数据,存入初始化数据.datatable:.word 10,5 ;初始化a1=10,a2=5.word 8,6 ;初始化x1=8,x2=6.mmregs ;开启系统默认的寄存器.global main ;定义全局符号;------------------------------------------------------------------------------.text ;开始编写程序main:stm #STACK_ADDR, SP ;设置堆栈stm #0x00a8, PMSTstm #0x0000, SWWSR;================================================stm #a, AR2 ;设置AR1 指向 astm #table, AR3 ;设置AR3指向tablerpt #1mvdd *AR3+, *AR2+ ;循环一次,将0x000A和0x0005存放在地址0x2000 stm #x, AR2 ;设置AR2指向xrpt #1mvdd *AR3+, *AR2+ ;将地址0x2005低16位的0x0008和0x0006存放到地址为0x2002的存储器空间call SUM ;执行sum模块的功能;死循环,使PC在当程序结束时锁定在一个已知的区域dead_loop:nopnopnopb dead_loop;================================================; y=a1*x1+a2*x2SUM:stm #a, AR3 ;设置AR3指向astm #x, AR4 ;设置AR4指向xrptz A, #1 ;清零寄存器A,并设置将下条乘加指令循环一次mac *AR3+, *AR4+, A ;完成a1*x1+a2*x2,最终的结果存放在A中stl A, *(y) ;将寄存器A的底16位存放在地址0x2004ret;------------------------------------------------------------------------------.sect "vectors" ;定义初始化了的带名称的段int_RESET:b main ;当有复位中断时,跳转至mainnopnop.space 124*16 ;若没有其他的中断,保留空间初始化时将A与X互换位置实验三:使用者如果希望修改其功能,可以直接编写gel文件,保存并重新装载。