可编程ASC技术.doc

上传人:豆**** 文档编号:33550533 上传时间:2022-08-11 格式:DOC 页数:16 大小:1.79MB
返回 下载 相关 举报
可编程ASC技术.doc_第1页
第1页 / 共16页
可编程ASC技术.doc_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《可编程ASC技术.doc》由会员分享,可在线阅读,更多相关《可编程ASC技术.doc(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、可编程ASIC技术课程作业2014姓名:陈志豪学号:120900812班级:自动12031举例说明阻塞赋值和非阻塞赋值有什么本质的区别?非阻塞赋值module non_block(c,b,a,clk);output c,b; input clk,a;reg c,b;always (posedge clk) begin b=a; c=b; endendmodule阻塞赋值module block(c,b,a,clk);output c,b;input clk,a;reg c,b;always (posedge clk) begin b=a; c=b; endendmodule非阻塞赋值仿真波形图

2、 阻塞赋值仿真波形图 由此可见阻塞赋值是并行赋值,非阻塞赋值是随机的。2用持续赋值语句描述一个4选1数据选择器。4选1的数据选择器程序:module mux4_1(out,in1,in2,in3,in4,sel1,sel2);input in1,in2,in3,in4;output out;input sel1,sel2;assign out=sel1?(sel2?in4:in3):(sel2?in2:in1);endmodule3设计一个功能和引脚与74138类似的译码器,并仿真。译码器程序:module encoder(out, in,en);output7:0 out;/*定义八位二进制

3、码输出口*/input2:0 in;/*定义三位二进制码输入口*/input2:0 en;/*三个使能端*/reg7:0 out;always (in or en) begin if(en=3b100) case(in) 3d0: out=8b11111110; 3d1: out=8b11111101; 3d2: out=8b11111011; 3d3: out=8b11110111; 3d4: out=8b11101111; 3d5: out=8b11011111; 3d6: out=8b10111111; 3d7: out=8b01111111; endcase else out=8b11

4、111111; endendmodule4设计一个4位、可预置、可清零的移位寄存器,并仿真。可预置、可清零的移位寄存器程序:module shift_register(out,in,reset,set,clk);output3:0 out;/*定义四位输出端*/input in,reset,set,clk;/*输入信号、清零端、置数端、时钟信号*/reg3:0 out;reg3:0 md;/*置数寄存器*/always(posedge clk)begin begin md=4b1101;end/*这里预置数为1101,可以根据需要更改*/ if(reset) begin out=0;end e

5、lse begin if(set) begin out=md;end/*置数信号为1,置数*/ else begin out=out,in;end endendendmodule5设计一个上升沿触发的可预置、可清零16进制计数器,并仿真。如果要改为10进制计数器,应对该设计做哪些修改?module counter_16(Q,en,clock,clear,S);output 3:0Q;input 3:0S;input en,clock,clear;reg3:0Q;always (posedge clock) begin if (clear=0) begin Q=4b0000; end else

6、if(en=1) begin Q=S; end else begin Q=4b1001)Q=4b0000;/当Q的值大于等于9,跳到06分别用结构描述、数据流描述、行为描述三种方式,设计一个2位加法器,并比较上述三种方式各自的优缺点。结构描述module full_add(a,b,cin,sum,cout);input a,b,cin;output sum,cout;wire s1,m1,m2,m3;and (m1,a,b),(m2,b,cin),(m3,a,cin);xor (s1,a,b),(sum,s1,cin);or(cout,m1,m2,m3);endmoduleinclude “f

7、ull_add.v”module add_2_1(sum,cout,a,b,cin);input cin;input1:0 a,b;output1:0 sum;output cout;full_add f0(a0,b0,cin,sum0,cin1);/级联full_add f1(a0,b0,cin1,sum1,cout);endmodule数据流描述module add_2_2 (a,b,cin,sum,cout);input cin;input 1:0 a,b;output 1:0 sum;output cout;assign cout,sum=a+b+cin;endmodule行为描述mo

8、dule add_2_3(cout,sum,a,b,cin); output1:0 sum; output cout; input1:0 a,b; input cin; reg1:0 sum; reg cout; always ( a or b or cin ) begin cout,sum=a+b+cin; end endmodule7利用状态机设计一个序列检测器,该检测器在有“101”序列输入时输出为1,其他输入情况下,输出为0。请画出状态转移图,并用Verilog语言描述实现,并仿真。状态说明:S0:表示初始状态;S1:表示检测到一个“1”信号;S2:表示检测到一个“10”信号;S3:表

9、示检测到一个“101”信号;序列检测器程序:module serial_detected(out,in,clk,reset);output out;/*结果输出端*/input in;/*串行输入的数据*/input reset,clk;/*清零信号、时钟信号*/reg out;reg2:0 S,NS;parameter S0=2b00,S1=2b01,S2=2b10,S3=2b11;/*状态编码*/always(posedge clk or negedge reset)/*根据输入信号更新状态*/ begin if(!reset) S=S0; else S=NS; endalways(S o

10、r in)/*根据输入,锁存记忆输入信号*/begincase(S) S0: if(in) NS=S1; else NS=S0; S1: if(in) NS=S1; else NS=S2; S2: if(in) NS=S3; else NS=S0; S3: if(in) NS=S1; else NS=S2;endcaseend always(S or reset or in) /*输出对应的结果*/begin if(!reset) out= 0; else if(S = S3) out= 1; else out= 0; end endmodule8设计一个加法器,实现sum=a0+a1+a2+

11、a3,a0、a1、a2、a3宽度都是8位。如用下面两种方法实现,哪种方法更好一些(即速度更快 and/or 资源更省)。(1)sum=(a0+a1)+a2)+a3(2)sum=(a0+a1)+(a2+a3)9用流水线技术对上例中的sum=(a0+a1)+a2)+a3的实现方式进行优化,对比最高工作频率,并分析说明:流水线设计技术为什么能提高数字系统的工作频率?未采用流水线技术程序:module adder8_1(sum,cout,cout1,cout2,a1,a2,a3,a4,cin,clk);output7:0 sum;/*和*/output cout1,cout2,cout;/*每执行一个

12、加法产生的进位信号*/input7:0 a1,a2,a3,a4;/*四个八位二进制数*/input cin,clk;/*cin为低位进位信号,低位加法时为0,clk为时钟信号*/reg7:0 S1,S2,sum;reg cout1,cout2,cout;always(posedge clk)begin cout1,S1=a1+a2+cin;/*第一个时钟来执行第一步加法*/endalways(posedge clk)begin cout2,S2=S1+a3; /*第二个时钟来执行第二步加法*/endalways(posedge clk)begin cout,sum=S2+a4; /*第三个时钟

13、来执行第三步加法*/endendmodule采用流水线技术程序:module addder8_3(cout1,cout2,cout3,sum,a1,a2,a3,a4,cin,clk);output7:0 sum;/*总和*/output cout1,cout2,cout3;/*每执行两个数相加产生的进位信号*/input7:0 a1,a2,a3,a4;/*四个加数*/input cin,clk;/*低位进位信号,作低位加法器为0、时钟信号*/reg7:0 sum,sum1,sum2;reg cout1,cout2,cout3,firstc,secondc,thirdc;reg3:0 tempa

14、1,tempa2,tempa3,tempb1,tempb2,tempb3,firstsum,secondsum,thirdsum; /*存储每四位相加的寄存器类型数*/always(posedge clk) begin firstc,firstsum=a13:0+a23:0+cin;/*a1和a2低四位相加*/ tempa1=a17:4; tempb1=a27:4; endalways(posedge clk) begin cout1,sum17:4=tempa1+tempb1+firstc; /*a2和a2高四位相加*/ sum13:0=firstsum; endalways(posedge

15、 clk) begin secondc,secondsum=sum13:0+a33:0; /*前两数的和的低四位和a3低四位相加*/ tempa2=sum17:4; tempb2=a37:4; endalways(posedge clk) begin cout2,sum27:4=tempa2+tempb2+secondc; /*前两数的和的高四位和a3高四位相加*/ sum23:0=secondsum; endalways(posedge clk) begin thirdc,thirdsum=sum23:0+a43:0; /*前三数的和的低四位和a4低四位相加*/ tempa3=sum27:4

16、; tempb3=a47:4; endalways(posedge clk) begin cout3,sum7:4=tempa3+tempb3+thirdc; /*前两数的和的高四位和a2高四位相加*/ sum3:0=thirdsum; endendmodule一级的寄存器组将大的组合逻辑切割成小的组合逻辑,以牺牲电路的面积来换取速度的。10分析下列的Verilog HDL模块,画出对应的逻辑图或写出逻辑表达式(组),并概括地说明其逻辑功能。module exe1(out, d3, d2,d1,d0, s1,s0);output out3, out2, out1, out0;input d3,

17、 d2,d1,d0, s1,s0;not (not_s1,s1), (not_s0,s0);and (out0, d0, not_s1, not_s0), (out1, d1, not_s1, s0);and (out2, d2, s1, not_s0), (out3, d3, s1, s0);or (out, out0, out1, out2, out3);endmodule根据不同的s1和s0,输出通道进行变化:(1) 当s1=0,s0=0时,out0=d0;(2) 当s1=0,s0=1时,out1=d1;(3) 当s1=1,s0=0时,out2=d2;(4) 当s1=1,s0=1时,ou

18、t3=d3。逻辑表达式组:out0=S1S0d0out1=S1S0d1out2=S1S0d2out3=S1S0d3out=out0+out1+out2+out3实现的逻辑功能就是典型的数据通道选择器11分析下列的Verilog HDL模块,用时序波图形或流程框图描述其行为,并概括地说明其逻辑功能。module exe2(fd_out, clk, d, clr);output fd_out;reg fd_out;input 15:0 d;input clk, clr;reg 15:0 cnt;always (posedge clk)beginif (!clr) cnt = 4h0000;else

19、begincnt = cnt - 1;if (cnt=0) begin fd_out = 1; cnt = d; endelse fd_out = 0;endendendmodule该程序实现的是可变模的减法计数器,输出的是每当到达设定模值就输出1,相当于对设定模进行检测。12分析下列的Verilog HDL模块,写出对应的逻辑表达式(组)或真值表,并概括地说明其逻辑功能。module exe3(op_result, func_sel, op_a, op_b);output 7:0 op_result;input 2:0 func_sel;input 3:0 op_a, op_b;reg 7:

20、0 op_result;always (func_sel or op_a or op_b)begincase (func_sel)3b000:op_result = op_a + op_b;3b001:op_result = op_a - op_b;3b010:op_result = op_a * op_b;3b011:op_result = op_a / op_b;3b100:op_result = op_a & op_b;3b101:op_result = op_a | op_b;3b110:op_result = op_a op_b;3b111:op_result = op_a op_b

21、;endcaseendendmodule(1) 当fun_sel=000时,op_result = op_a + op_b(2) 当fun_sel=001时,op_result = op_a - op_b;(3) 当fun_sel=010时,op_result = op_a * op_b;(4) 当fun_sel=011时,op_result = op_a / op_b;(5) 当fun_sel=100时,op_result = op_a & op_b;(6) 当fun_sel=101时,op_result = op_a | op_b;(7) 当fun_sel=110时op_result = op_a op_b;(8) 当fun_sel=111时op_result = op_a op_b;由此可知,该段程序实现的功能是:根据不同的输入选择信号(000,001,010,011,100,101,110,111),对于两个四位二进制数进行加、减、乘、除、与、或、异或、同或运算。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com