设计一个字节(8位)比较器

上传人:j****9 文档编号:55273909 上传时间:2018-09-26 格式:PPT 页数:56 大小:232.50KB
返回 下载 相关 举报
设计一个字节(8位)比较器_第1页
第1页 / 共56页
设计一个字节(8位)比较器_第2页
第2页 / 共56页
设计一个字节(8位)比较器_第3页
第3页 / 共56页
设计一个字节(8位)比较器_第4页
第4页 / 共56页
设计一个字节(8位)比较器_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《设计一个字节(8位)比较器》由会员分享,可在线阅读,更多相关《设计一个字节(8位)比较器(56页珍藏版)》请在金锄头文库上搜索。

1、EXERCISE,VERILOG DESIGN,四输入加法器,za+b+c+d; z=(a+b)+(c+d);,练习一简单的组合逻辑设计,练习一简单的组合逻辑设计目的: 掌握基本组合逻辑电路的实现方法。 设计一个可综合的数据比较器 模块源代码: /- compare.v - module compare(equal,a,b); input a,b; output equal;assign equal=(a=b)?1:0; /a等于b时,equal输出为1;a不等于b时,/equal输出为0。 endmodule,测试模块源代码: timescale 1ns/1ns /定义时间单位。 inclu

2、de “./compare.v“ /包含模块文件。在有的仿真调试环境中并不需要此语句。/而需要从调试环境的菜单中键入有关模块文件的路径和名称 module comparetest;reg a,b;wire equal;initial /initial常用于仿真时信号的给出。begin a=0; b=0;#100 a=0; b=1;#100 a=1; b=1;#100 a=1; b=0;#100 $stop; /系统任务,暂停仿真以便观察仿真波形。end compare compare1(.equal(equal),.a(a),.b(b); /调用模块。 endmodule,仿真波形(部分):,

3、练习: 设计一个字节(8位)比较器。 要求:比较两个字节的大小,如a7:0大于 b7:0输出高电平,否则输出低电平,改写测试模型,使其能进行比较全面的测试 。,练习二. 简单时序逻辑电路的设计,目的:掌握基本时序逻辑电路的实现。 设计1/2分频器的可综合模型/ half_clk.v:module half_clk(reset,clk_in,clk_out); input clk_in,reset; output clk_out; reg clk_out;always (posedge clk_in)beginif(!reset) clk_out=0;else clk_out=clk_out;e

4、nd endmodule,在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的。对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一个复位信号reset,当reset为低电平时,对电路中的寄存器进行复位。,测试模块的源代码: /- clk_Top.v - timescale 1ns/100ps define clk_cycle 50 module clk_Top; reg clk,reset; wire clk_out; always #clk_cycle clk = clk; init

5、ialbeginclk = 0;reset = 1;#100 reset = 0;#100 reset = 1;#10000 $stop;end half_clk half_clk(.reset(reset),.clk_in(clk),.clk_out(clk_out); endmodule,练习三. 利用条件语句实现较复杂的时序逻辑电路目的:掌握条件语句在Verilog HDL中的使用。 为了描述较为复杂的时序关系,Verilog HDL提供了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条件语句有ifelse和caseendcase两种结构 10M的时钟分频为5

6、00K的时钟。基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准确获得1/20分频,模块源代码: / - fdivision.v - module fdivision(RESET,F10M,F500K); input F10M,RESET; output F500K; reg F500K; reg 7:0j;always (posedge F10M)if(!RESET) /低电平复位。beginF500K = 0;j = 0;endelse beginif(j=19) /对计数器进行判断,以确定F500K信号是否反转。beginj = 0;F500K = F500K;endelse

7、j = j+1;end endmodule,测试模块源代码: /- fdivision_Top.v - timescale 1ns/100ps define clk_cycle 50 module division_Top; reg F10M_clk,RESET;wire F500K_clk;always #clk_cycle F10M_clk = F10M_clk; initialbegin RESET=1; F10M=0; #100 RESET=0; #100 RESET=1; #10000 $stop;endfdivision fdivision (.RESET(RESET),.F10M

8、(F10M_clk),.F500K(F500K_clk);endmodule,练习四. 设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别,目的:1.明确掌握阻塞赋值与非阻塞赋值的概念和区别;2.了解阻塞赋值的使用情况。 在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为赋值语句是并发执行的。实际的时序逻辑设计中,一般的情况下非阻塞赋值语句被更多地使用 。(注意:在实现组合逻辑的assign结构中,无一例外地都必须采用阻塞赋值语句。,模块源代码:/ - blocking.v -module blocking(clk,a,b,c);output 3:0 b,c;inpu

9、t 3:0 a;input clk;reg 3:0 b,c;always (posedge clk)beginb = a;c = b;$display(“Blocking: a = %d, b = %d, c = %d.“,a,b,c); end endmodule,/- non_blocking.v - module non_blocking(clk,a,b,c);output 3:0 b,c;input 3:0 a;input clk;reg 3:0 b,c;always (posedge clk)beginb = a;c = b;$display(“Non_Blocking: a = %

10、d, b = %d, c = %d.“,a,b,c); endendmodule,测试模块源代码: /- compareTop.v -timescale 1ns/100ps include “./blocking.v“ include “./non_blocking.v“module compareTop;wire 3:0 b1,c1,b2,c2;reg 3:0 a;reg clk;initialbeginclk = 0;forever #50 clk = clk;end,initial begina = 4h3;$display(“_“);# 100 a = 4h7;$display(“_“

11、);# 100 a = 4hf;$display(“_“);# 100 a = 4ha;$display(“_“);# 100 a = 4h2;$display(“_“);# 100 $display(“_“);$stop;endnon_blocking non_blocking(clk,a,b2,c2);blocking blocking(clk,a,b1,c1); endmodule,思考:在blocking模块中按如下写法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果。1 always (posedge clk)beginc = b;b = a;end 2. always

12、 (posedge clk) b=a;always (posedge clk) c=b;,练习五. 用always块实现较复杂的组合逻辑电路,目的: 1.掌握用always实现组合逻辑电路的方法;2.了解assign与always两种组合逻辑电路实现方法之间的区别。 一个简单的指令译码电路的设计示例,/- alu.v - define plus 3d0 define minus 3d1 define band 3d2 define bor 3d3 define unegate 3d4 module alu(out,opcode,a,b); output7:0 out; reg7:0 out;

13、input2:0 opcode; input7:0 a,b; /操作数。 always(opcode or a or b) /电平敏感的always块 begincase(opcode)plus: out = a+b; /加操作。minus: out = a-b; /减操作。band: out = a/未收到指令时,输出任意态。endcase end endmodule,同一组合逻辑电路分别用always块和连续赋值语句assign描述时,代码的形式大相径庭,但是在always中适当运用default(在case结构中)和else(在ifelse结构中),通常可以综合为纯组合逻辑,尽管被赋值的

14、变量一定要定义为reg型。不过,如果不使用default或else对缺省项进行说明,则易生成意想不到的锁存器,这一点一定要加以注意。,指令译码器的测试模块源代码: /- alu_Top.v - timescale 1ns/1ns include “./alu.v“ module alutest;wire7:0 out;reg7:0 a,b;reg2:0 opcode;parameter times=5;initialbegin a=$random%256; /Give a radom number blongs to 0,255 .b=$random%256; /Give a radom number blongs to 0,255.opcode=3h0;repeat(times)begin#100 a=$random%256; /Give a radom number.b=$random%256; /Give a radom number.opcode=opcode+1;end #100 $stop; end alu alu1(out,opcode,a,b); endmodule,

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

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号