2023年北理工VHDL实验报告.pdf
北京理工大拳Beijing Institute of Technology本科实验报告实验名称:VHDL语言及集成电路设计实验课程名称:VHDL语言及集成电路设计实验时间:2 023.5任课教师:桂小琰实验地点:4-427实验教师:任仕伟实验类型:原理验证 综合设计学生姓名:自主创新学号/班级:组 号:学院:信息与电子学院同组搭档:专业:电子科学与技术成绩:信息与电子学院SCHOOL OF INFORMATION AND ELECTRONICS实验一:带有异步复位端的D触发器一、实验目的(1)熟 悉1 in ux操作环境和m o d el s i m软件环境(2)理解时序逻辑和组合逻辑电路的区别(3)理解并行语句和顺序语句(4 )用V H D L语言编写一个带有异步复位端的D触发器及其测试文献二、实验原理 组合逻辑和时序逻辑错误!组合逻辑电路当前输出的值仅取决于当前的输入,不需要触发器等具有存储能力的逻辑单元,仅仅使用组合逻辑门错误!时序逻辑电路的当前输出不仅取决于当前的输入,还与以前的输入有关,这类电路中涉及寄存器等元件,也涉及组合逻辑电路,寄存器通过一个反馈环和组合逻辑模块相连。触发器便是属于时序逻辑电路输入一*组合逻辑一输出一(a)(a)组合逻辑电路;(b)时序逻辑电路(2)并行和顺序代码从本质上讲,VHDL代码是并发执行的。只有PROCESS,F UNCTION或PROCEDUR E 内的代码才是顺序执行的。当它们作为一个整体时,与其他模块之间又是并发执行的。以下是3 个并发描述语句(st 2 11尉聚2 和 4洪 3)的代码,会产生同样的电路结构。s t atl stat3 s t atlstat2=stat 2=stat3=其他排列顺序st a t3 statl st a 12(3)并行语句进 程(PROCESS)错误!语法结构:进程名:1PROCESS(敏感信号列表)变量说明语句BEGIN(顺序执行的代码)END PROCESS 进程名;错误!PROCESS 的特点1多进程之间是并行执行的;2进程结构内部的所有语句都是顺序执行的;3进程中可访问结构体或实体中所定义的信号;4进程的启动是由敏感信号列表所标明的信号来触发,也可以用WAIT语句等待一个触发条件的成立。5各进程之间的通信是由信号来传递的。(4)带有异步复位端的D触发器错误!电路符号 o a c(0,2)功能表RDC PQ0XX01X0保持1X1保持10上升沿011上升沿1三、实验代码LIB RAR Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;EN TITY d f f ISPORT(d,c Ik,r st:IN STD_LO G IC;q:OUT STD_LOGIC);END d f f;ARCHI TEC TURE behavior OF dff ISBEGINPROCESS(rst,c 1 k)BEGINIF(rst=l)THENq=O;E LS I F(c 1 k z EVEN T AND ck=lz)THENqd,c 1 k=c 1 k,rst=rst,q=q);cl k _g e n:pr o c essb e g i nclk=,0;wait f or clk_pe r io d/2;e l k=1 ;wait for clk_period/2;end pr o c e s s;d _g e n:p ro c e s sbegi nwait for 1 00 n s;d 二;wait for 100 ns;d=,O;end pro cess;r st_gen:proce s sbeg i nr s t=z r;w a it for 150 ns;rst=,0wa i t for 5 0 0 ns;r s tV=T;w a it for 1 50 ns;w a it;e nd pro c es s;end t b _ b eh a v ior;四、仿真结果值 wav。-default/dfljb/ck/dfljb/q/dfl_tb/rst实验二步进电机控制器一、实验目的(1)理解两种状态机的区别熟悉两种编程风格(3)编写B C D 计数器和步进电机二、实验原理(1)米里型状态机和摩尔型状态机米里(Me a l y)型状态机:状态机的输出信号不仅与电路的当前状态有关,还与当前的输入有关复位信号输出摩尔(Mo o r e)型状态机:状态机的当前输出仅仅由当前状态决定次态 状态输入 f 逻 辑 次 态 寄存器现态输出逻辑输出时钟信号_复位信号(2)有限状态机设计流程:1理解问题背景。2逻辑抽象,得出状态转移图。3状态简化。4状态分派。5用V H D L来描述有限状态机。(3)BCD计数器原理图(4)步进电机控制器原理图步进电机状态与输出信号的相应关系状态输出状态so000 1S 100 1 0S20 100S3100 0三、实验代码(l)B C D 计数器libr a ry i ee e;u se i e ee.st d _ logic_ 1 1 6 4.all;entity co u nt e r ispo r t(c 1 k,rs t:i n std_ 1 ogic;count:ou t st d _ lo g i c_ve c tor(3 downto 0);en d counter;a r c h i t e c t u r e s t a t e _ mac h ine of co u nter isty p e stat e i s(z e r o,one,two,t hre e,f o u r,fi v e,six,se v e n,e ig h t,nine);sign a 1 p r _ s t a te,nx_ state:s t a te;beg i npr o c e s s(rst,c Ik)b eg i nif(rst=*1*)thenp r _st a t e co u n t V=0000,;nx_state cou n t cou n t v=00 1 0”;nx_state coun t=M0 0 1 1 n;nx_ s tat e c o u n t =1010 0 M;nx_stat e cou n t=H 0101”;n x _ stat e c o unt=n0 110;nx_ sta t e c oun t=n 0 111”;n x_ s tate cou n t=n1000n;nx_sta t e count=H 100 1nx_ s t a t e =zero;end case;end p r ocess;e n d sta t e_ma c h i ne;(2)步进电机控制器lib r a r y i e ee;use i e e e.std_ 1 o g ic_116 4.all;e n t ity step mot o r i sport(c 1 k,rs t,x:in std_l o gi c;o utput:out st d _ 1 o g i c _vec t o r(3 downto0);end s t e pmo t or;arch i tecture s t ate_ m a chine of s tepm o to r i sty p e s ta t e is(s 0,s 1,s 2,s3);signal pr_state,nx_ sta t e:s tate;be g i np roce s s(clk,rst)beginif(rs t=l)t h enpr_ s tate=sO;e 1 sif(clk eve n t a n d cl k=r 1 1)thenpr_s t a t e outpu t=0001 n;nx_s t ate outp u t=0 0 10n;nx_s t ate output=n 0 10 0”;nx_sta t e o u t put =M1 0 0 0 n;n x_s t a t e o u t p ut=000ln;n x _state outp u t =*0010;n x_s t ate output =0100;n x_ s tate o u t put=1 00 0nx_stateJS(15:12)S(ll:8)S(7:4)S(3:0三、实验代码4 位加法器:libra r y ieee;use i eee.s t d_ 1 ogi c _1164.all;e n ti t y a d d e r 4 isport(a,b:in std_l o gic_vector(3 downto 0);cin:i n s t d_lo g i c;s:o ut s t d_ 1 og i c_ v ector(3 d own t o 0);cout:out s t d_lo g i c);end ad d e r 4;a r chitecture be h a v o f a dd e r4 issignal c:std_ 1 ogi c _vec t or(4 downto 0);s ignal p:s t d_logic_ ve c tor(3 dow n to 0);s i gnal g:s t dogic_ v ector(3 d own t o 0);beginGl:fbr i in 0 t o 3 gen e ra t ep(i)=a(i)x or b(i);g(i)=a(i)and b(i);s(i)=p(i)xor c(i);e nd generate;c(0)=cin;c(l)=(cin an d p(0)or g(0);c(2)=(cin an d p(0)an d P(1)or(g(0)an d p(l)or g(l);c(3)=(c in a n d p(0)and P(1)a nd P)or(g(0)an d p(l)and P(2)or(g(l)andP(2)or g(2);c(4)=(cin a n d p(0)and P(l)and P(2)and P(3)o r(g(0)andp(l)an d P(2)and P(3)o r(g(1)and P(2)and P(3)or(g(2)an d P(3)o r g(3);c o uta,b=b,s=s,cin=c i n,cout=co u t);pr o c es sbe g ina=xO 0 OO;b=x 00 OO;c i n=T;wait f o r 1 0 0 n s;a=0 00 1b=0111;c i n=0wait f o r 1 0 Ons;a=x 1 1 11;b=xllll ;c in=l;w a i t for 100 n s;a=0 001;b=0111;cinAA比较器,AB。x“AB十,_A=B_0。COUT(15:0)2(3)乘法器部分采用并行乘法器并型乘法器top_rowmid_rowmid_rowmid_rowlower_row33 VHDL Hdware Description Lang(4)加法器:8 位加法器的设计和上一个实验类似,先设计一个4 位加法器,进而编译8 位加法器。三、实验代码与门:1 ibr a r y ieee;use ieee.std_ 1 o g i c _ 1 164.a 1 1;e n t ity a n d_2 ispo r t(a,b:in s td_logi c;y:o u t s td_ 1 ogic);en d and _2;a r c h itec t ure be h a v of a n d _2 isbeg i ny=a and b;end b eh a v;全加器:libr a ry ieee;u se ie e e.st d _1 o gic_1164.a 1 1;enti t y fau isp o rt(a,b,cin:in s t d _ logic;s,cout:o u t std_ logic);end fau;arc h itecture b e h av o f fau isb egi ns=a x o r b xo r c i n;c ou t=(a and b)or(aan d c i n)or(b a n d c i n);en d beh a v;顶层:libra r y i eee;use i e e e.s td_logic_l 164.all;us e wo r k.my_compon e nts.a 1 1;e ntity top_ r ow isp o rt(a:in s t d _ 1 o g ic;b:i n s t d Jog i c_ ve c tor(7 down t o 0);sou t,cout:ou t std_ 1 ogic_ v ec t or(6 d o wnt o 0);p:out stdjogic);e nd t o p_row;a r c hi t ec t ure b ehav of top_row i sbeginul:c o mp o n e nt an d _2 p ort map(a,b(7),sout(6);u2:c o m p o ne n t and_2 p o rt map(a,b(6),sou t(5);u 3:com p one n t a n d_ 2 po r t ma p(a,b(5),s out(4);u 4:component an d _ 2 p ort map(a,b(4),s out(3);u5:comp o nent an d _ 2 p o rt map(a,b(3),so u t(2);u6:c o mponen t a n d_2 p o r t m a p(a,b(2),sout(l);u 7:comp o n en t a n d_2 por t map(a,b(l),sout(0);u 8:com p onent and _2 p o rt map(a,b(0),p);u 9:for i in 0 to 6 generatecou t(i)=O;en d g e nerate;en d b e ha v;中层:lib r a r y ie e e;us e i e ee.s t d_lo g i c _116 4.a 1 1;u s e wo r k.m y_co m ponent s.a 1 1;entit y mid_ ro w isp o rt(a:in std_ logic;b:in std_log i c _v e ctor(7 downto 0);sin,ci n:in s td_ 1 o g i c_v e cto r(6 down t o 0);sout,c o u t:o u t std_ 1 o g i c_ve c t o r(6 d o w n to 0);p:ou t std_l o g ic);end mid_ r ow;archi t e cture beh a v of mi d _ ro w i ss i gnal and_ out:st d Jog i c _ vector(6 do wnto 0);be g inu l:com p o nent an d _ 2 p o rt ma p(a,b(7),so u t(6);u 2:component an d _2 port map(a,b(6),a n d_ o ut(6);u 3:com pone n t a nd_ 2 port m a p(a,b(5),a n d _ o ut(5);u 4:component a n d_2 por t map(a,b(4),a nd_o u t(4);u5component and_2 port ma p(a,b(3),a n d_o u t(3);u 6:comp o nent a n d _ 2 po r t m a p(a,b(2),and_out(2);u 7:compo n e nt a n d_2 por t map(a,b(l),a n d_o u t(1);u 8:c omponent a n d _2 port m ap (a,b(0),a n d _out(0);u 9:c o mpo n e n t f a u p ort map(si n(6),ci n(6),and_o u t(6),sout(5),co u t(6);u 10:c o mponent f a u p or t ma p(sin(5),c in(5),a n d_out(5),sout(4),cout(5);ull:componen t fau p o r t ma p(sin(4),c i n(4),a nd_out(4),s o u t(3),co ut(4);ul2:com p o n ent f a u p o r t map(s i n(3),cin(3),and_o u t(3),s o u t(2),cout(3);ul3:compo n en t fau p ort ma p(sin(2),c i n(2),and_ o u t(2),s o u t(l),c o ut(2);u 1 4:comp o nent f a u port map(si n(l),c i n(1),and_ o ut(1),s o u t(0),c out(1);ul5:compone n t f a u port m a p(s i n(0),ci n(0),and_out(0),p,c o ut(0);end beh a v;底层:libra r y i e ee;use i e e e.s t d_lo g i c_l 16 4.al 1 ;us e wor k.my_ c o mp o ne n ts.all;e n tity 1 o wer_row i sp o rt(s i n,cin:i n std_logi c _ v e c t or(6 dow n t o 0);p:out std_l o gic_ v e c t o r(7 d o wnt o 0);en d lower_ row;a r c h i t e ct u re b e ha v of lowe r _row issignal l o c a l:s t d_ 1 o g ic_ ve c to r(6 downto 0);be g in1 o cal(0 )=,0,;ul:compo n e n t fau p o rt map(sin(0),cin(0),lo c al(0),p(0),lo c al(1);u2:c o mponent fau port m a p(sin(1),c in(l),lo c al(l),p(l),Iocal(2);u3:c omponent fa u p ort map(s i n(2),ci n(2),lo c al(2),p(2),1 o cal(3);u4:c o mpone n t f a u port map(sin(3),cin(3),local(3),p(3),lo c a 1 (4);u5:c o mpon e nt fau p ort m a p(s i n(4),c in(4),loca 1 (4),p(4),l o ca 1 (5);u6:c omp o n en t f au p or t map(s i n(5),cin(5),1 o c al(5),p(5),loca 1 (6);u7:c omp o nen t f au port ma p(s i n(6),c in(6),l o cal(6),p(6),p(7);e n d be h a v;乘法器用到的的元件声明:1 i b ra r y ieee;u se ie e e.s t d_ 1 o gic_ 1164.all;p a c k a ge my_comp o n ents iscomponen t an d _ 2 isport(a,b:i n std_lo g i c;y:o u t s td_ 1 o g ic);end c o mpon e nt;c o m p o n e n t fa u ispo r t(a,b,c in:i n std_ 1 o g ic;s,c o u t:o u t std_logic);end c o mponent;compo n ent top_r o w isp ort(a:in s td_logi c;b:in std_ 1 o g i c_ v ecto r(7 do w nto 0);sout,c o u t:out std_l o gic_ vector(6 down t o 0);p:out s t d_ logic);end comp o nent;co m p onen t mi d _ r ow isp o r t (a:in std_l o gic;b:i n s tdo g ic_v e ctor(7 downto 0);sin,c i n:i n s t d_l o gic_vect o r(6 d ow n to 0);so u t,c o u t:o u t std_logic_ v e c to r(6 d ow n to 0);p:out s td_l o gic);end com p o n e nt;compon e nt low e r_ r o w isp o rt(s i n,c i n:in s td_1 ogic_ v e c tor(6 do wn t o 0);p:out std_ 1 ogi c _ v ecto r(7 dow n to 0);e n d component;e n d my_ compo n ent s;乘法器:1 i b r a ry i e e e;u se iee e.s t d _ 1 o g ic_ 1 1 6 4.all;use wo r k.my_ c ompo n ents.a l l;en t it y m u 1 tipi i er isp o rt(a,b:in s td _logic_ve c tor(7 downto 0);p r od:o u t s t d_ 1 o g i c_vect o r(1 5 dow n to 0);end multip 1 i e r;arc h it e c tu r e b e h a v o f mul t ipl i er i styp e matrix i s ar r ay(0 t o 7)of s t d_ logic_ v ector(6 downt o 0);sig n al s,c:m a tri x;beginul:c om p onent to p _row p or t m a p(a(0),b,s(0),c(0),p rod(0);u2:c o mponent mid_r o w p o rt map(a(1 ),b,s(0),c(0),s(l),c(1 ),prod(1 );u 3:compone n t m i d_ row po r t ma p(a(2),b,s(l),c(l),s(2),c(2),p ro d(2);u4:c o mp o n e n t m i d_row port map(a(3),b,s(2),c(2),s(3),c(3),prod(3);u5:c o mponent m i d_ r ow p o r t map(a(4),b,s(3),c(3),s(4),c(4),prod(4);u6:c omponent mid_ r o w p o rt ma p(a(5),b,s(4),c(4),s(5),c(5),pr od(5);u 7:component m i d_r o w port map(a(6),b,s(5),c(5),s(6),c(6),p rod(6);u 8:com p onent mid_ r ow por t map(a(7),b,s(6),c(6),s(7),c(7),prod(7);u 9:component lo w er_row p o rt map(s(7),c(7),prod(1 5 do w n to 8);e nd be h a v;4位加法器:lib r ary i e e e;use ieee.std_log i c _ 1 1 64.a 1 1 ;entity a dd e r4 isp ort(a,b:i n std_l o gi c _vecto r(3 d o wnto 0);ci n:in st d _ 1 ogi c;s:o ut s td_log i c_vect o r O d o w nto 0);co u t:o u t st d_1 o g i c);end adder 4;a rchi te c ture beha v of a d der4 issign a 1 c:std_lo g ic_vecto r(4 d o w n t o 0);signal p:std_lo g i c _ vec t o r(3 dow n to 0);s igna 1 g:s td_ logi c _vect o r(3 down t o 0);b e g inG1:f o r i i n 0 t o 3 gen e r a t eP(i)=a(i)xo r b(i);g(i)=a(i)and b(i);s(i)=p(i)xo r c(i);end g e ne r a te;c(0)=c in;c(l)=(cin and p(0)o r g(0);c(2)=(cin a n d p(0)and P(1 )or(g(0)an d p(l)c(3)=(cin and p(0)(2)or(g(1)and P(2)c(4)=(cin an d p(0)P(2)and P(3)o r(g(l)r g(3);cou t b)thenf 1 ag=l;el s i f(ab)t h enflag=2;else f 1 a g=3;end i f;end p roc e s s;with f 1 ag selectc outf 0)w h e n othe r s;end b e hav;测试文献:libr a ry ieee;use i e e e.s t d _logic_ll 6 4.a 1 1;en t it y o peration_tb i se n d op e r a t i o n_tb;arch i tec t ure be h av o f op e r a tion_ tb isc o m p onen t o pe r a tionpo r t(a,b:in std_ 1 ogic_ ve c tor(7 do wnto 0);cou t:out s t d_logic_vector(15 d ownto 0);end com p on e nt;s ign a 1 a,b:std_ 1 ogic_ v ector(7 do w nto 0);sign a 1 co u t:s tdo g i c _ v e ct o r(15 down t o 0);beg i nw:oper atio n p o r t m a p(a=a,b=b,c ou t=c o u t);inp u t_ gen:p r ocessb e gina=n 0 1 1 1 1111;b二 00000 0 0 1;wa i t fo r 1 0 0 ns;aV二”000 0 1 1 1 1 ”;b=0 100 0 0 0 1 n;wait fo r 1 0 0 n s;a=1 0 101010;b=10 1 01 0 10;wait for 100 ns;a=1110 0 1 0 0;b=101010 1 0;w ait for 1 0 0 ns;a=0010 1 0 10;b=1010 1 010;w a it for 1 00 ns;a=1 1 1 0 11 1 1;b=11 1 01 1 11;wai t fo r 100 ns;wait;e nd process;end;四、仿真结果g|v/ave-default五、总结与感悟通过这4周的实验,我 对VHD L语言有了更加深刻的理解,同时对1 i nux操作系统有了一定了解。在实践中,我对理论知识理解薄弱的地方进行了加强,例如元件的声明和例化(compon e nt语句)不属于书面的考试范围,我一直对其理解的不充足,但是通过后两次的实验,我逐渐掌握了这部分知识,这充足说明了学习VHDL语言时,必须经常自己动手编程,在实践中不断查漏补缺。很感谢桂老师和任老师的悉心教导,让我对这门语言产生了充足的爱好,学到了很多有用的知识。