付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、verilog 实例代码与门module zxha nd2(c,a,b);input a,b;out put c;assig n c= a & b;en dmodule或门module zxhor2(c,a,b);input a,b;out put c;assig n c= a | b;en dmodule非门module zxhno t2(c,b);input b;out put c;assig n c= b;en dmodule /异或门 module zxhxro2(c,a,b);input b;out put c;assign c=a 八 b;en dmodule两选一电路mo
2、dule data_sca n( d0,d1,sel,q); out put q;input d0,d1,sel;wire t1,t2,t3;n1 zxha nd2(t1,d0,sel);n2 zxh not2 (t4,sel);n3 zxha nd2(t2,d1,t4);n4 zxhor2(t3,t1,t2);assig n q=t1;en dmodule verilog HDL 实例(一)练习一.简单的组合逻辑设计目的:掌握基本组合逻辑电路的实现方法。这是一个可综合的数据比较器,很容易看出它的功能是比 较数据a与数据b, 如果两个数据相同,则给出结果1,否则给出结果0。在Verilog H
3、DL中,描述 组合逻辑时常使用assign结构。注意equal=(a=b)?1:0这是一种在组合逻辑实 现分支判断时常使用的格式。rCRYt。模块源代码:/comp are.vmodule comp are(equal,a,b);input a,b;out put equal;assign equal=(a=b)?1:0; /a等于 b 时,equal输出为 1 ; a不等于 b 时,/equal输出为0。en dmodule测试模块用于检测模块设计得正确与否,它给出模块的输入信号,观察模块 的内部信号和输出信号,如果发现结果与预期的有所偏差,则要对设计模块进 行修改。VstEm测试模块源代码
4、:'timescale 1ns/1ns /定义时间单 位。module comp aretest;reg a,b;wire equal;initial /initial常用于仿真时信号的给出。beg in a=0;b=0;#100 a=0;b=1;#100 a=1;b=1;#100 a=1;b=0;#100 $stop; /系统任务,暂停仿真以便观察仿真波形。endcomp are comp are1(.equal(equal),.a(a),.b(b);调用模块。BRBQJEn dmodule【例3.1】4位全加器module adder4(cout,sum,i na,i nb,c i
5、n); out pu t3:0 sum;out put cout;inpu t3:0 ina,in b;input cin;assig n cout,sum=ina+in b+c in;en dmodule【例3.2】4位计数器module coun t4(out,reset,clk);out pu t3:0 out;input reset,clk;reg3:0 out;always (p osedge clk)begi nif (reset) out<=0; 同步复位else outv=out+1; /计数 enden dmodule09.04.07【例5.11】模为60的BCD码加法
6、计数器 module eoun t60(qout,cout,data,load,ci n,reset,clk); out pu t7:0 qout;out put cout;inpu t7:0 data;inpu t load,c in, clk,reset;reg7:0 qout;always ( posedge elk) /elk 上升沿时刻计数begi nif (reset) qout<=0; 同步复位else if(load) qout<=data; /伺步置数 else if(cin)beg in if(qout3:0=9) /低位是否为9,是则 beg in qout3
7、:0v=0; /回0,并判断高位是否 为5if (qout7:4=5) qout7:4<=0;else qout7:4v=qout7:4+1; / 高位不为5,则加 1 end else /氐位不为9,则加1 qout3:0<=qout3:0+1; endend assig n cout=(qout=8'h59)&cin )?1:0; /产生进位输出信号 en dmodule【例9.10】奇偶校验位产生器module p arity(eve n_bit,odd_bit,i npu t_bus); out put eve n_bit,odd_bit;inpu t7:0
8、 inpu t_bus;assign odd_bit =八 inp ut_bus; /产生奇校验位 assig n eve n_bit = odd_bit; /产生偶校 验位en dmoduleVerilog HDL 实例(二)练习二.简单时序逻辑电路的设计目的:掌握基本 时序逻辑电路的实现。在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方 式。在可综合的Verilog HDL模型,我们通常使用always块和 (posedge elk)上 升沿)或(negedge elk)下降沿)的结构来表述时序逻辑。下面是一个1/2分频 器的可综合模型。IThHj。/ half
9、_clk.v:module half_clk(reset,clk_i n,clk_out);input clk_i n,reset;out put clk_out;reg clk_out;always (p osedge clk_in)begi nif(!reset) clk_out=0;else clk_out=clk_out;enden dmodule在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特 点所决定的。对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不 定态。为了能正确地观察到仿真结果,在可综合风格的模块中我们通常定义一 个复位信号reset当
10、reset为低电平时,对电路中的寄存器进行复位。4joJb。 测试模块的源代码:SIJKT。/ clk_T op.v 'timescale 1n s/100 ps'defi ne clk_cycle 50module clk_To p.v;reg clk,reset;wire clk_out;always #'clk_cycle clk = clk;in itialbegi nclk = 0;reset = 1;#100 reset = 0;#100 reset = 1;#10000 $sto p;endhalf_clk half_clk(.reset(reset),.
11、clk_in(clk),.clk_out(clk_out); D24Yg en dmoduleVerilog HDL 实例(三)练习三.利用条件语句实现较复杂的时序逻辑电路目的:掌握条件 语句在Verilog HDL中的使用。RWxvr与常用的高级程序语言一样,为了描述较为复杂的时序关系,Verilog HDL提供 了条件语句供分支判断时使用。在可综合风格的Verilog HDL模型中常用的条 件语句有ifelse和caseendcase两种结构,用法和C程序语言中类似。两者 相较,ifelse用于不很复杂的分支关系,实际编写可综合风格的模块、特别是 用状态机构成的模块时,更常用的是casee
12、ndcase风格的代码。这一节我们给 的是有关ifelse的范例,有关caseendcase结构的代码已后会经常用到。3Shze. 下面给出的范例也是一个可 综合风格的分频器,是将10M的时钟分频为500K 的时钟。基本原理与1/2分频器是一样的,但是需要定义一个计数器,以便准 确获得1/20分频eSLk&模块源代码:/fdivisio n.vHDJQEmodule fdivisio n(reset,f10m,f500k);input f10m,reset;out put f500k;reg f500k;reg 7:0j;always (p osedge f10m)if(!RESET)
13、II低电平复位。beginf500k <= 0;j <= 0;endelsebeginif(j=19)对计数器进行判断,以确定F500K信号是否反转。beg inj <= 0;f500k <= f500k;endelsej <= j+1;endzI02r。en dmodule测试模块源代码:/ fdivision_T op.v 'timescale 1n s/10 Ops 'defi ne clk_cycle 50 module divisio n_Top;reg f10m=0,reset;wire f500k;always #'clk_c
14、ycle f10m = - f10m;in itialbeg in reset=1;#100 reset=0;#100 reset=1;#10000 $st op;end fdivision fdivision (.reset(reset),.f10m(f10m),.f500k(f500k); xgtTg。en dmoduleVerilog HDL 实例(四)练习四.设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别目的:1.明确掌握阻塞赋值与非阻塞赋值的概念和区别;UXnWT2.了解阻塞赋值的使用情况。阻塞赋值与非阻塞赋值,在教材中我们已经了解了它们之间在语法上的区别以 及综合后所得到的电路结构上
15、的区别。在always块中,阻塞赋值可以理解为赋 值语句是顺序执行的,而非阻塞 赋值可以理解为赋值语句是并发执行的。实际 的时序逻辑设计中,一般的情况下非阻塞 赋值语句被更多地使用,有 时为了在zY3Tt。同一周期实现相互关联的操作,也使用了阻塞 赋值语句。(注意:在实现组合 逻辑的assign结构中,无一例外地都必 须采用阻塞赋值语句。下例通过分别采用阻塞赋值语句和非阻塞赋值语句的两个看上去非常相似的 两个模块blocking.v和non_blocking.v来阐明两者之间的区别。lMUxm 模块源代码:/ blocki ng.vmodule blocki ng(clk,a,b,c);out
16、 put 3:0 b,c;input 3:0 a;input clk;reg 3:0 b,c;always (p osedge clk)beginb = a;c = b;enden dmodule/ no n_blocki ng.v -module non _blocki ng(clk,a,b,c);out put 3:0 b,c;input 3:0 a;input clk;reg 3:0 b,c;always (p osedge clk)begi nb <= a;c <= b;enden dmodule测试模块源代码:0bq5y。ZARcf。/ comp areT op.v
17、39;timescale 1n s/100 ps'in elude "./block in g.v"'in elude "./n on _blocki ng.v" module comp areT op;wire 3:0 b1,c1,b2,c2;reg 3:0 a;reg clk;in itialbegi nclk = 0;forever #50 clk = clk;endin itialbegi na = 4'h3;$display("# 100 a = 4'h7;$display("# 100 a
18、= 4'hf;$display("# 100 a = 4'ha;$display("# 100 a = 4'h2;$display("# 100 $display("$st op;endnon _block ing non_ blocki ng(clk,a,b2,c2); blocki ngblock in g(clk,a,b1,c1);en dmoduleIIIIIIIIIIIIVerilog HDL 实例(五)练习五.用always块实现较复杂的组合逻辑电路 目的:1.掌握用always实现组合逻辑电路的方法;0cWnc2.了
19、解assign与always两种组合逻辑电路实现方法之间的区别。仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方会显得冗 长且效率低下。而适当地采用always来设计组合逻辑,往往会更具实效。已进 行的范例和练习中,我们仅在实现时序逻辑电路时使用always块。从现在开始, 我们对它的看法要稍稍改变。YiSak。下面是一个简单的指令译码电路的设计示例。该电路通过对指令的判断,对输 入数据执行相应的操作,包括加、减、与、或和求反,并且无 论是指令作用的数据还是指令本身发生变化,结果都要作出及时的反应。显然,这是一个较为 复杂的组合逻辑电路,如果米用assigpRzoy。语句,表达
20、起来非常复 杂。示例中使用了电平敏感的always块,所谓电平敏感 的触发条件是指在后的括号内电平列表中的任何一个 电平发生变化,(与时 序逻辑不同,它在后的括号内没有沿敏感关 键词,如Posedge或negedge 就能触发always块的动作,并且运用了 case结构来进行分支判断,不但 设计 思想得到直观的体现,而且代码看起来非常整齐、便于理解。HtYzn。alu.v3'dO3'd13'd23'd36ltaF。/'defi ne plus'defi ne minus'defi ne band'defi ne bor '
21、;defi ne un egate 3'd4module alu(out,o pcode,a,b);out pu t7:0 out;reg7:0 out;inpu t2:0 op code;inp ut7:0 a,b;操作数。always(opcode or a or b) 电平敏感的 always块 FotFo。begi ncase( op code)'p lus: out = a+b; / 加操作。减操作。求与。'minus: out = a-b;'ba nd: out = a&b;'bor: out = a|b; / 求或。'un
22、egate: out=a; 求反。default: out=8'hx;/未收到指令时,输出任意态。endcaseenden dmodule同一组合逻辑电路分别用always块和连续赋值语句assign描述时,代码的形式 大相径庭,但是在always中适当运用default (在case结构中)和else (在if else结构中),通常可以 综合为纯组合逻辑,尽管被赋值的变量一定要定义为 reg型。不过,如果不使用default或else对缺省项进行说明,则易生成意想不 到的锁存器,这一点一定要加以注意。3S8VI。指令译码器的测试模块源代码:/alu_T op.v'times
23、cale 1ns/1nsmodule alutest;wire7:0 out;reg7:0 a,b; reg2:0 op code;p arameter times=5;in itial/Give a radom number blo ngs to 0,255 LoUDt。 /Give a radom number blo ngs to 0,255zyrOGbegina=$ra ndom%256;b=$ra ndom%256;op code=3'h0;rep eat(times)begin#100a=$ra ndom%256; /Give a radom number.b=$ra nd
24、om%256; /Give a radom nu mber. opcode=opcode+1;end$st op;#100endalualu1(out,o pcode,a,b);en dmoduleVerilog HDL 实例(六)练习六.在Verilog HDL中使用函数目的:掌握函数在模 块设计中的使用。与一般的程序设计语言一样,Veirlog HDL也可使用函数以适 应对不同变量采 取同一运算的操作。Veirlog HDL函数在综合时被理解成具有独立运算功能的 电路,每调用一次函数相当于改 变这部分电路的输入以得到相应的计算结果。z1d6F。下例是函数调用的一个简单示范,采用同步 时钟触
25、发运算的执行,每个clk时 钟周期都会执行一次运算。并且在 测试模块中,通过调用系统任务$display在 时钟的下降沿显示每次计算的结果。w7Wm3模块源代码:module tryfu nct(clk ,n ,result,reset);out put31:0 result;inpu t3:0n;input reset,clk;reg31:0 result;always (p osedge clk)/clk的上沿触发同步运算。beg inif(!reset)/reset为低时复位。result<=0;elsebegin result <= factorial( n);endend
26、/函数定义。fun ctio n 31:0 factorial;input 3:0 operand;reg 3:0 in dex;beg infactorial = 1;for(i ndex = 1; in dex <= operand; in dex = in dex + 1)x5Hwyfactorial = in dex * factorial;endendfunction en dmodule测试模块源代码:'timescale 1n s/10 0ps module tryfuctT op;reg3:0 n,i;reg reset,clk;wire31:0 result;i
27、n itialbeg inn=0;reset=1;clk=0;#10 reset=0;#10 reset=1;for(i=0;iv=15;i=i+1)begin#20 n=i;end#10 $st op;end always #5 clk=clk;tryfunct tryfu nct(.clk(clk),. n(n ),.result(result),.reset(reset);zu p8f。en dmodule上例中函数factorial(n)实际上就是阶乘运算。必须提醒大家注意的是,在实际 的设计中,我们不希望设计中的运算过于复杂,以免在综合后带来不可预测的 后果。经常的情况是,我 们把复
28、杂的运算分成几个步 骤,分别在不同的时钟甬 期完成。rr20y。Verilog HDL 实例(七)练习七.在Verilog HDL中使用任务(task)目的:掌握任务在结构化Verilog HDL设计中的应用。qml4G仅有函数并不能完全 满足Veirlog HDL中的运算需求。当我 们希望能够将一些 信号进行运算并输出多个结果时,采用函数结构就显得非常不方便,而任 务结 构在这方面的优势则十分突出。任务本身并不返回计算值,但是它通过类似C 语言中形参与实参的数据交换,非常快捷地实现运算结果的调用。此外,我们 还常常利用任务来帮助我们实现结构化的模块设计,将批量的操作以任 务的形 式独立出来,
29、这样设计的目的通常一眼看过去就很明了。grI1D。下面是一个利用task和电平敏感的always块设计比较后重组信号的组合逻辑的 实例。可以看到,利用task非常方便地实现了数据之间的交换,如果要用函数 实现相同的功能是非常复 杂的;另外,task也避免了直接用一般 语句来描述所 引起的不易理解和 综合时产生冗余逻辑等问题。7CnA0模块源代码:/sort4.v module ss(ra,rb,rc,rd,a,b,c,d);out pu t3:0 ra,rb,rc,rd;inp ut3:0 a,b,c,d;reg3:0 ra,rb,rc,rd;reg3:0 va,vb,vc,vd;always
30、 (a or b or c or d)beg inva,vb,vc,vd=a,b,c,d;sort2(va,vc);/va与VC互换。sort2(vb,vd);/vb与vd互换。sort2(va,vb);/va与vb互换。sort2(vc,vd);/vc与vd互换。sort2(vb,vc);/vb与vc互换。ra,rb,rc,rd=va,vb,vc,vd;endtask sort2;in out3:0 x,y;reg3:0 tmp;if(x>y)begintmp=x;赋值方式。/x与y变量的内容互换,要求顺序执行,所以采用阻塞x=y;y=t mp;enden dtask en dmodu
31、le值得注意的是task中的变量定义与模块中的变量定义不尽相同,它们并不受输 入输出类型的限制。如此例,x与y对于task sort2来说虽然是inout型,但实 际上它们对应的是always块中变量,都是reg型变量。26tsp 测试模块源代码:'timescale 1n s/100 ps module task_T op;reg3:0 a,b,c,d;wire3:0 ra,rb,rc,rd;ss my (.a(a),.b(b),.c(c),.d(d), .ra(ra),.rb(rb),.rc(rc),.rd(rd)5xvfG。 in itialbeg ina=0;b=0;c=0;d
32、=0;#100 a =$random%15; b =$ra ndom%15; c =$ra ndom%15; d =$ra ndom%15; #100 $st op;end en dmodule【例3.5】“与-或-非”门电路module AOI(A,B,C,D,F); / 模块名为AOI(端口列表 A , B, C, D, F) input A,B,C,D; /模块的输入端口为A, B, C, D out put F; 模块的输出端口为Fwire A,B,C,D,F; /定义信号的数据类型 assign F= (A&B)|(C&D); / 逻辑功能描述en dmodule【例
33、5.2】同步置数、同步清零的计数器module eoun t(out,data,load,reset,elk);out pu t7:0 out;inpu t7:0 data;inpu t load,elk,reset; reg7:0 out;always (p osedge elk) /elk 上升沿触发beg in if (!reset) out = 8'hOO; 同步清0,低电平有效else if (load) out = data; /同步预置 else out = out + 1; /计数 enden dmodule【例5.14】隐含锁存器举例module buried_ff(
34、c,b,a);out put e;input b,a;reg e;always (a or b)begi nif(b=1)&&(a=1) e=a&b; enden dmodule【例5.16】用for语句实现2个8位数相乘 module mult_for(outcome,a,b);p arameter size=8;inpu tsize:1 a,b; 两个操作数out put2*size:1 outcome; / 结果reg2*size:1 outcome; in teger i;always (a or b) beg inoutcome=0;for(i=1; i<
35、;=size; i=i+1) /for 语句if(bi) outcome=outcome +(a << (i-1); enden dmodule【例9.1】基本门电路的几种描述方法(1)门级结构描述module gate1(F,A,B,C,D);input A,B,C,D;out put F;nan d(F1,A,B); 调用门元件an d(F2,B,C,D); or(F,F1,F2);en dmodule(2)数据流描述module gate2(F,A,B,C,D); input A,B,C,D;out put F;assign F=(A&B)|(B&C&
36、D); /assign 持续赋值en dmodule(3)行为描述module gate3(F,A,B,C,D); input A,B,C,D;out put F;reg F;always (A or B or C or D) / 过程赋值beg inF=(A&B)|(B&C&D);endendmodule【例9.2】用bufifi关键字描述的三态门module tri_1(in,en,out);input in,en;output out;tri out;bufif1 b1(out,in,en); /注意三 态门端口的排列 顺序endmodule【例9.3】用assi
37、gn语句描述的三态门 module tri_2(out,in,en);output out;input in,en;assign out = en ? in : 'bz;若en=1,则out=in;若en=0,则out为高阻态endmodule【例 9.4】三态双向驱动器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【例 9.5】
38、三态双向驱动器module bidir2(bidir,en,clk); inout7:0 bidir;input en,clk;reg7:0 temp;assign bidir= en ? temp : 8'bz;always (posedge clk)beginif(en) temp=bidir;else temp=temp+1;endendmodule【例9.13】用组合电路实现的ROMmodule rom(addr,data); input3:0 addr;output7:0 data;function7:0 romout; input3:0 addr; case(addr) 0
39、1234 56 78 9romout = 0; romout = 1; romout = 4; romout = 9; romout = 16; romout = 25; romout = 36; romout = 49; romout = 64; romout = 81;10 : romout = 100; 11 : romout = 121;12 : romout = 144; 13 : romout = 169;14 : romout = 196; 15 : romout = 225; default : romout = 8'hxx; endcase endfunction a
40、ssign data = romout(addr); endmodule 【例9.14】基本 D 触发器 module DFF(Q,D,CLK); output Q; input D,CLK; reg Q;always (posedge CLK) begin Q <= D; end endmodule【例9.15】带异步清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 negedg
41、e resQeiftU)I 。 begin if (!reset) begin q <= 0; /异步清 0,低 电平有效 qn <= 1;endelse if (!set) begin q <= 1; /异步置1,低电平有效 qn <= 0;end else begin q <= d;qn <= d;endendendmodule【例9.16】带同步清0同步置1的D触发器module DFF2(q,qn,d,clk,set,reset); input d,clk,set,reset;output q,qn;reg q,qn;always (posedge
42、clk) begin if (reset) begin q <= 0; qn <= 1; /同步清0,高电平有效 endelse if (set) begin q <=1; qn <=0; /同步置 1,高 电平有效end else begin q <= d; qn <= d;end end endmodule【例9.17】带异步清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 o
43、r 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; endcase end endmodule【例9.18】电平敏感的 1 位数据锁存器 module latch_1(q,d,clk);output q; inp
44、ut d,clk;assign q = clk ? d : q; /时钟信号为高电平时,将 输入端数据 锁存endmodule【例9.19】带置位和复位端的 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); endmodule【例9.20】 8 位数据 锁存器 module latch_8(qout,data,clk); output7:0 qout;input7:0 data; input clk
45、;reg7:0 qout; always (clk or data) begin if (clk) qout<=data;end endmodule【例 9.21】8 位数据寄存器 module reg8(out_data,in_data,clk,clr); output7:0 out_data;input7:0 in_data; input clk,clr;reg7:0 out_data; always (posedge clk or posedge clr) begin if(clr) out_data <=0;else out_data <=in_data; end e
46、ndmodule【例 9.22】8 位移位寄存器module shifter(din,clk,clr,dout); input din,clk,clr;output7:0 dout;reg7:0 dout;always (posedge clk) begin if (clr) dout<= 8'b0; /同步清0,高电平有效 else begin dout <= dout << 1; /输 出信号左移一位dout0 <= din; /输入信号补充到输出信号的最低位 endend endmodule【例 9.23】可变模加法 /减法计数器module upd
47、own_count(d,clk,clear,load,up_down,qd); input7:0 d;input clk,clear,load; input up_down; output7:0 qd;reg7:0 cnt; assign qd = cnt; always (posedge clk) begin if (!clear) cnt = 8'h00; /同步清0,低电平有效 else if (load) cnt = d; /同步 预置else if (up_down) cnt = cnt + 1; /加法 计数else cnt = cnt - 1; /减法 计数endendm
48、odule【例9.24】4位Johnson计数器(异步复位)module johnson(clk,clr,out); input clk,clr; output3:0 out; reg3:0 out;always (posedge clk or posedge clr) beginif (clr) out<= 4'h0;elsebegin out<= out<< 1;out0<= out3;endendendmodule【例9.25】 256X 8 RAM模块module ram256x8(data,address,we,inclock,outclock,
49、qd);de0O。 input7:0 data;input7:0 address;input we,inclock,outclock;output7:0 q;lpm_ram_dq myram(.q(q),.data(data),.address(addressH)y,Kn9。 .we(we),.inclock(inclock),.outclock(outclock);defparam myram.lpm_width=8; /定义数据 宽度defparam myram.lpm_widthad=8; /定义地址 宽度endmodule【例 9.26】 256X 16 RAM 块module map
50、_lpm_ram(dataout,datain,addr,we,inclk,outclk)e;1wMN。input15:0 datain; /端口定 义input7:0 addr;input we,inclk,outclk;output15:0 dataout;/lpm_ram_dq 元件例化lpm_ram_dq ram(.data(datain),.address(addr),.we(we),.inclock(inclk)D,4Imp。.outclock(outclk),.q(dataout);defparam ram.lpm_width=16; /参数 赋值defparam ram.lpm
51、_widthad=8;defparam ram.lpm_indata="REGISTERED" defparam ram.lpm_outdata="REGISTERED"defparam ram.lpm_file="map_lpm_ram.mif" /RAM 块中的内容取自 该文件yl15M°endmodule【例9.27】 4 位串并 转换器 module serial_pal(clk,reset,en,in,out); input clk,reset,en,in;output3:0 out;reg3:0 out;alwa
52、ys (posedge clk)beginif(reset) out<=4'h0;else if(en) out<=out,in; / 使用 连 接运算符end endmodule例10.6】自动转换量程频率计控制器/*信号定义:clk:输入时钟;clear:为整个频率计的异步复位信号;reset:用来在量程 转换 开始时复位计数器;std_f_sel: 用来选择标 准时基;cntover: 代表超量程; cntlow: 代表欠量程。状态A, B, C, D, E, F采用一位热码编码*/ module control(std_f_sel , reset,clk,clear
53、,cntover,cntlow)n;sbIW。 output1:0 std_f_sel;output reset;input clk,clear,cntover,cntlow;reg1:0 std_f_sel;reg reset;reg5:0 present,next; /用于保存当前状 态和次 态的中间变量parameter start_fl00k=6'b000001,状态A 编码,采用 1 位热码flOOk_c nt=6'b000010, 状态 B start_fl0k=6'b000100, /状态 C fl0k_c nt=6'b001000, 状态 D s
54、tart_flk=6'b010000, /状态 E flk_cnt=6'b100000; / 状态 F always (posedge clk or posedge clear) begin if(clear) present<=start_fl0k; /start_fl0k 为起始状 态else present<=next;endalways (present or cntover or cntlow) begin case(present) /用/ case 语 句描述状 态转换start_fl00k: next<=fl00k_cnt;fl00k_cnt:
55、beginif(cntlow) next<=start_fl0k;else next<=fl00k_cnt;endstart_fl0k: next<=fl0k_cnt;fl0k_cnt:beginif(cntlow) next<=start_flk;else if(cntover) next<=start_fl00k;else next<=fl0k_cnt;endstart_flk: next<=flk_cnt; flk_cnt:beginif(cntover) next<=start_fl0k; else next<=flk_cnt;end default:next<=start_fl0k; /缺省状态为起始状 态endcaseend always (present) /该/ 进程产生各状 态下的输出begincase(present)start_fl00k: begin reset=1; std_f_sel=2'b00; end fl00k_cnt: begin reset=0; std_f_sel=2'b00; end start_fl0k: begin reset=1; std_f_sel=2'b01; end fl0k_cnt: begin reset=0; std_f_sel=2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年计算机三基模拟题及答案详解
- 2026年红桃传情模拟题及答案详解
- 2026年月嫂职业技能考试模拟试卷(含答案)
- 2026年智慧广场模拟试卷(含答案)
- 2026年中医护理知识考试模拟题及答案详解
- 2026年医生护士考试模拟试卷(含答案)
- 2026年教师资格证考试模拟题及答案详解
- 人教版必修一第一章第二节“化学计量在实验中的应用”单元教学设计
- 消防安全保证措施方案
- 小学信息技术第三册下 第2课 Logo命令训练营(一)1教案 泰山版
- 国企临建和隧道工程现场施工标准化作业图集课件
- 人类的飞天梦课件
- DZ/T 0222-2006地质灾害防治工程监理规范
- 团体标准解读及临床应用-成人经鼻高流量湿化氧疗技术规范2025
- 成都文理就业协议书
- 惠尔顿网络安全审计系统使用手册V0
- 10千伏环网柜(箱)标准化设计方案 (2023 版)
- 《国际资本流动理论》课件
- 《贴片工艺培训》课件
- 介入治疗前后注意事项
- 康熙字典-繁体字笔画五行1-30
评论
0/150
提交评论