首页 Verilog数字系统设计教程(夏宇闻)例题源上册例题第13章例题

Verilog数字系统设计教程(夏宇闻)例题源上册例题第13章例题

举报
开通vip

Verilog数字系统设计教程(夏宇闻)例题源上册例题第13章例题 第十三章 例题 [例1] 宇宙飞船控制器的状态机 module statemachine ( launch_shuttle, land_shuttle, start_countdown, start_trip_meter, clk, all_systems_go, just_launched, is_landed, cnt, abort_mission); output launch_shuttle, land_shuttle, start_countdown, start_trip_meter;...

Verilog数字系统设计教程(夏宇闻)例题源上册例题第13章例题
第十三章 例题 [例1] 宇宙飞船控制器的状态机 module statemachine ( launch_shuttle, land_shuttle, start_countdown, start_trip_meter, clk, all_systems_go, just_launched, is_landed, cnt, abort_mission); output launch_shuttle, land_shuttle, start_countdown, start_trip_meter; input clk, just_launched, is_landed, abort_mission, all_systems_go; input [3:0] cnt; reg launch_shuttle, land_shuttle, start_countdown, start_trip_meter; //设置独热码状态的参数 parameter HOLD=5'b00001, SEQUENCE=5'b00010, LAUNCH=5'b00100; parameter ON_MISSION=5'b01000, LAND=5'b10000; reg [4:0] state; always @(negedge clk or posedge abort_mission) begin //检查异步reset的值,即abort_mission的值 if(abort_mission) {launch_shuttle, land_shuttle, start_trip_meter, start_countdown}<= 4'b0000; state<=LAND; else begin /* 主状态机,状态变量state */ case ( state ) HOLD: if (all_systems_go) begin state <= SEQUENCE; start_countdown <= 1; end else state <= HOLD; SEQUENCE: if (cnt = = 0 ) state <= LAUNCH; else state <= SEQUENCE; LAUNCH: begin state <= ON_MISSION; launch_shuttle <= 1; end ON_MISSION: //取消使命前,一直留在使命状态 if (just_launched) start_trip_meter <= 1; else state <= ON_MISSION; LAND: if (is_landed) state <= HOLD; else begin land_shuttle <= 1; state <= LAND; end default: state = 5'bxxxxx; endcase end end //end of always endmodule [例1] 八位带进位端的加法器的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 实例(利用简单的算法描述) module adder_8(cout,sum,a,b,cin); output cout; output [7:0] sum; input cin; input[7:0] a,b; assign {cout,sum}=a+b+cin; endmodule [例2]指令译码电路的设计实例 (利用电平敏感的always块来设计组合逻辑) //操作码的宏定义 `define plus 3'd0 `define minus 3'd1 `define band 3'd2 `define bor 3'd3 `define unegate 3'd4 module alu (out,opcode,a,b); output [7:0] out; input [2:0] opcode; input [7:0] a,b; reg [7:0] out; always @(opcode or a or b) //用电平敏感的always块描述组合逻辑 begin case(opcode) //算术运算 `plus: out=a+b; `minus: out=a-b; //位运算 `band: out=a&b; `bor: out=a|b; //单目运算 `unegate: out=~a; default: out=8'hx; endcase end endmodule [例3].利用task和电平敏感的always块设计比较后重组信号的组合逻辑. module sort4(ra,rb,rc,rd,a,b,c,d); parameter t=3; output [t:0] ra, rb, rc, rd; input [t:0] a, b, c, d; reg [t:0] ra, rb, rc, rd; always @(a or b or c or d) //用电平敏感的always块描述组合逻辑 begin : local //此处begin - end块必须有一模块名因为块中定义了局部变量 reg [t:0] va, vb, vc, vd; {va,vb,vc,vd}={a,b,c,d}; sort2(va,vc); sort2(vb,vd); sort2(va,vb); sort2(vc,vd); sort2(vb,vc); {ra,rb,rc,rd}={va,vb,vc,vd}; end task sort2; inout [t:0] x, y; reg [t:0] tmp; if( x > y ) begin tmp = x; x = y; y = tmp; end endtask endmodule [例4]. 比较器的设计实例(利用赋值语句设计组合逻辑) module compare(equal,a,b); parameter size=1; output equal; input [size-1:0] a, b; assign equal =(a==b)? 1 : 0; endmodule [例5]. 3-8译码器设计实例(利用赋值语句设计组合逻辑) module decoder(out,in); output [7:0] out; input [2:0] in; assign out = 1'b1< 设计方案 关于薪酬设计方案通用技术作品设计方案停车场设计方案多媒体教室设计方案农贸市场设计方案 之一: module encoder1(none_on,out,in); output none_on; output [2:0] out; input [7:0] in; reg [2:0] out; reg none_on; always @(in) begin: local //此处begin - end块必须有一模块名因为块中定义了局部变量 integer i; out = 0; none_on = 1; /*returns the value of the highest bit number turned on*/ for( i=0; i<8; i=i+1 ) begin if( in[i] ) begin out = i; none_on = 0; end end end endmodule // 编码器设计 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 之二: module encoder2 ( none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input h, g, f, e, d, c, b, a; output none_on, out2, out1, out0; wire [3:0] outvec; assign outvec= h? 4'b0111 : g? 4'b0110 : f? 4'b0101: e? 4'b0100 : d? 4'b0011 :c? 4'b0010 : b? 4'b0001: a? 4'b0000 : 4'b1000; assign none_on = outvec[3]; assign out2 = outvec[2]; assign out1 = outvec[1]; assign out0 = outvec[0]; endmodule // 编码器设计方案之三: module encoder3 (none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input h, g, f, e, d, c, b, a; output out2, out1, out0; output none_on; reg [3:0] outvec; assign {none_on,out2,out1,out0} = outvec; always @( a or b or c or d or e or f or g or h) begin if(h) outvec = 4'b0111; else if(g) outvec = 4'b0110; else if(f) outvec = 4'b0101; else if(e) outvec = 4'b0100; else if(d) outvec = 4'b0011; else if(c) outvec = 4'b0010; else if(b) outvec = 4'b0001; else if(a) outvec = 4'b0000; else outvec = 4'b1000; end endmodule [例7]. 多路器的设计实例。 使用连续赋值、case语句或if-else语句可以生成多路器电路,如果条件语句(case或if-else)中分支条件是互斥的话,综合器能自动地生成并行的多路器。 //多路器设计方案之一: modul emux1(out, a, b, sel); output out; input a, b, sel; assign out = sel? a : b; endmodule //多路器设计方案之二: module mux2( out, a, b, sel); output out; input a, b, sel; reg out; //用电平触发的always块来设计多路器的组合逻辑 always @( a or b or sel ) begin /*检查输入信号sel的值,如为1,输出out为a,如为0, 输出out为b.*/ case( sel ) 1'b1: out = a; 1'b0: out = b; default: out = 'bx; endcase end endmodule //多路器设计方案之三: module mux3( out, a, b, sel); output out; input a, b, sel; reg out; always @( a or b or sel ) begin if( sel ) out = a; else out = b; end endmodule [例8]. 奇偶校验位生成器设计实例 module parity( even_numbits,odd_numbits,input_bus); output even_numbits, odd_numbits; input [7:0] input_bus; assign odd_numbits = ^input_bus; assign even_numbits = ~odd_numbits; endmodule [例9]. 三态输出驱动器设计实例 (用连续赋值语句建立三态门模型) 三态输出驱动器设计方案之一: module trist1( out, in, enable); output out; input in, enable; assign out = enable? in: 'bz; endmodule 三态输出驱动器设计方案之二: module trist2( out, in, enable ); output out; input in, enable; //bufif1是 一个 Verilog门级原语(primitive) bufif1 mybuf1(out, in, enable); endmodule [例10]. 三态双向驱动器设计实例 module bidir(tri_inout, out, in, en, b); inout tri_inout; output out; input in, en, b; assign tri_inout = en? In : 'bz; assign out = tri_inout ^ b; endmodule 13.5.2. 时序逻辑电路设计实例 [例1]触发器设计实例 module dff( q, data, clk); output q; input data, clk; reg q; always @( posedge clk ) begin q <= data; end endmodule [例2]. 电平敏感型锁存器设计实例之一 module latch1( q, data, clk); output q; input data, clk; assign q = clk? data : q; endmodule [例3]. 带置位和复位端的电平敏感型锁存器设计实例之二 module latch2( q, data, clk, set, reset); output q; input data, clk, set, reset; assign q= reset? 0 : ( set? 1:(clk? data : q ) ); endmodule [例4]. 电平敏感型锁存器设计实例之三 module latch3( q, data, clk); output q; input data, clk; reg q; always @(clk or data) begin if(clk) q=data; end endmodule 注意:有的综合器会产生一警告信息 告诉你产生了一个电平敏感型锁存器。因为我们设计的就是一个电平敏感型锁存器,就不用管这个警告信息。 [例5]. 移位寄存器设计实例 module shifter( din, clk, clr, dout); input din, clk, clr; output [7:0] dout; reg [7:0] dout; always @(posedge clk) begin if(clr) //清零 dout <= 8'b0; else begin dout <= dout<<1; //左移一位 dout[0] <= din; //把输入信号放入寄存器的最低位 end end endmodule [例6]. 八位计数器设计实例之一 module counter1( out, cout, data, load, cin, clk); output [7:0] out; output cout; input [7:0] data; input load, cin, clk; reg [7:0] out; always @(posedge clk) begin if( load ) out <= data; else out <= out + cin; end assign cout=( & out) & cin; //只有当out[7:0]的所有各位都为1 //并且进位cin也为1时才能产生进位cout endmodule [例7]. 八位计数器设计实例之二 module counter2( out, cout, data, load, cin, clk); output [7:0] out; output cout; input [7:0] data; input load, cin, clk; reg [7:0] out; reg cout; reg [7:0] preout; //创建8位寄存器 always @(posedge clk) begin out <= preout; end /****计算计数器和进位的下一个状态,注意:为提高性能不希望加载影响进位****/ always @( out or data or load or cin ) begin {cout, preout} = out + cin; if(load) preout = data; end endmodule 带异步高电平有效的置/复位端的D触发器实例 module dff1( q, qb, d, clk, set, reset ); input d, clk, set, reset; output q, qb; //声明q和qb为reg类型,因为它需要在always块内赋值 reg q, qb; always @( posedge clk or posedge set or posedge reset ) begin if(reset) begin q <= 0; qb <= 1; end else if (set) begin q <= 1; qb <= 0; end else begin q <= d; qb <= ~d; end end endmodule //同步的具有高电平有效的置位与复位端的always块样板 always @(posedge clk) begin if(reset) begin /*置输出为0*/ end else if(set) begin /*置输出为1*/ end else begin /*与时钟同步的逻辑*/ end end 4) 同步的具有高电平有效的置位/复位端的D触发器 module dff2( q, qb, d, clk, set, reset); input d, clk, set, reset; output q, qb; reg q, qb; always @(posedge clk) begin if(reset) begin q<=0; qb<=1; end else if(set) begin q<=1; qb<=0; end else begin q<=d; qb<=~d; end end endmodule PAGE 9
本文档为【Verilog数字系统设计教程(夏宇闻)例题源上册例题第13章例题】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_031052
暂无简介~
格式:doc
大小:70KB
软件:Word
页数:9
分类:互联网
上传时间:2018-09-08
浏览量:78