湖工大电信大四一学期EDAVerilog HDL考试资料.docx

上传人:b****5 文档编号:7554665 上传时间:2023-01-24 格式:DOCX 页数:29 大小:21.45KB
下载 相关 举报
湖工大电信大四一学期EDAVerilog HDL考试资料.docx_第1页
第1页 / 共29页
湖工大电信大四一学期EDAVerilog HDL考试资料.docx_第2页
第2页 / 共29页
湖工大电信大四一学期EDAVerilog HDL考试资料.docx_第3页
第3页 / 共29页
湖工大电信大四一学期EDAVerilog HDL考试资料.docx_第4页
第4页 / 共29页
湖工大电信大四一学期EDAVerilog HDL考试资料.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

湖工大电信大四一学期EDAVerilog HDL考试资料.docx

《湖工大电信大四一学期EDAVerilog HDL考试资料.docx》由会员分享,可在线阅读,更多相关《湖工大电信大四一学期EDAVerilog HDL考试资料.docx(29页珍藏版)》请在冰豆网上搜索。

湖工大电信大四一学期EDAVerilog HDL考试资料.docx

湖工大电信大四一学期EDAVerilogHDL考试资料

1.什么叫EDA技术?

EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。

2.利用EDA技术进行电子系统的设计,具有以下几个特点:

①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。

⑥从以前的“组合设计”转向真正的“自由设计”;⑦设计的移植性好,效率高,⑧非常适合分工设计,团体协作。

3.硬件描述语言(HDL):

常用的硬件描述语言有VHDL、Verilog、ABEL。

4.EDA软件系统应当包含以下子模块:

设计输入子模块、设计数据库子模块、分析验证子模块、综合仿真子模块、布局布线子模块等。

5.EDA的工程设计流程:

第一需要进行“源程序的编辑和编译”——用一定的逻辑表达手段将设计表达出来;第二要进行“逻辑综合”——将用一定的逻辑表达手段表达出来的设计,经过一系列的操作,分解成一系列的基本逻辑电路及对应关系(电路分解);第三要进行“目标器件的布线/适配”——在选定的目标器件中建立这些基本逻辑电路及对应关系(逻辑实现);第四,目标器件的编程/下载——将前面的软件设计经过编程变成具体的设计系统(物理实现);最后,要进行硬件仿真/硬件测试——验证所设计的系统是否符合设计要求。

同时,在设计过程中要进行有关“仿真”——模拟有关设计结果与设计构想是否相符。

【例3.27】3-8线译码器(高电平有效)

//3-8线译码器(高电平有效)decode3_8a.v

moduledecoder3_8a(ain,en,yout)

inputen;

input[2:

0]ain;

output[7:

0]yout;

reg[7:

0]yout;

always@(enorain)

begin

if(!

en)

yout=8’b00000000;

else

case(ain)

3’b000:

yout=8’b00000001;

3’b001:

yout=8’b00000010;

3’b010:

yout=8’b00000100;

3’b011:

yout=8’b00001000;

3’b100:

yout=8’b00010000;

3’b101:

yout=8’b00100000;

3’b110:

yout=8’b01000000;

3’b111:

yout=8’b10000000;

deflaut:

yout=8’b00000000;

endcase

end

【例3.28】3-8线译码器(低电平有效)

//3-8线译码器(低电平有效)decode3_8b.v

moduledecoder3_8b(g1,g2a,g2b,c,b,a,y7,y6,y5,y4,y3,y2,y1,y0);

inputg1,g2a,g2b;

inputc,b,a;

outputy7,y6,y5,y4,y3,y2,y1,y0;

regy7,y6,y5,y4,y3,y2,y1,y0;

always@(g1org2aorg2borcorbora)

begin

if((g1==1’b0)||(g2a==1’b1)||(g2b==1’b1))

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111111;

elseif((g1==1’b1)&&(g2a==1’b0)&&(g2b==1’b0))

begin

case({c,b,a})

3’b000:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111110;

3’b001:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111101;

3’b010:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111011;

3’b011:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11110111;

3’b100:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11101111;

3’b101:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11011111;

3’b110:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b10111111;

3’b111:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b01111111;

deflaut:

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111111;

endcase

end

else

{y7,y6,y5,y4,y3,y2,y1,y0}<=8’b11111111;

end

endmodule

2.编码器

【例3.29】8-3线优先编码器。

//8-3线优先编码器:

encode8_3.v

Moduleencode8_3(y,a);

Output[2:

0]y;

Input[7:

0]a;

Reg[2:

0]y;

Always@(a)

Casex(a)

8’b?

?

?

?

?

?

?

1:

y=3’d000;

8’b?

?

?

?

?

?

10:

y=3’d001;

8’b?

?

?

?

?

100:

y=3’d010;

8’b?

?

?

?

1000:

y=3’d011;

8’b?

?

?

10000:

y=3’d100;

8’b?

?

100000:

y=3’d101;

8’b?

1000000:

y=3’d110;

8’b10000000:

y=3’d111;

deflaut:

y=3’bzzz;

endcase

endmodule

3.比较器

【例3.30】8位二进制比较器

//8位二进制比较器compare8.v

Modulecompare8(a,b,eq,gt,lt);

Input[7:

0]a,b;

Outputeq,gt,lt;

Regeq,gt,lt;

Always@(aorb)

Begin

If(a==b)

{eq,gt,lt}<=3’b100;

Elseif(a>b)

{eq,gt,lt}<=3’b010;

ElseIf(a

{eq,gt,lt}<=3’b001;

else

{eq,gt,lt}<=3’b000;

End

Endmodule

4.选择器

【例3.31】四选一信号选择器一。

Modulemul4_1a(y,s,x);

Outputy;

Input[1:

0]s;

Input[3:

0]x;

Regy;

Always@(sorx)

Begin

Case(s)

2’b00:

y=x[0];

2’b01:

y=x[1];

2’b10:

y=x[2];

2’b11:

y=x[3];

Deflaut:

y=1’b0;

Endcase

End

Endmoduse

【例3.32】四选一信号选择器二

//使用if语句的四选一信号选择器mul4_1b.v

Modulemul4_1b(y,s,x);

Outputy;

Input[1:

0]s;

Input[3:

0]x;

Regy;

Always@(sorx)

Begin

If(s==2’b00)

Y=x[0];

If(s==2’b01)

Y=x[1];

If(s==2’b10)

Y=x[2];

else

Y=x[3];

End

Endmodule

【例3.33】四选一数据选择器。

//四选一数据选择器mul4_1c.v

Modulemul4_1c(y,s,data0,data1,data2,data3);

Output[7:

0]y;

Input[1:

0]s;

Input[7:

0]data0,data1,data2,data3;

Regy;

Always@(sordata0ordata1ordata2ordata3)

Begin

If(s==2’b00)

Y=data0;

ElseIf(s==2’b01)

Y=data1;

ElseIf(s==2’b10)

Y=data2;

Else

Y=data3;

End

Endmodule

5.驱动电路

1)【例3.34】三态门电路

//三态门电路tritate.v

Moduletristate(en,din,dout);

Inouten,din;

Outputdout;

Regdout;

Always@(enordin)

If(en==1’b1)

Dout<=din;

Else

Dout<=1’bz;

End

endmodule

【例3.35】单向总线驱动器。

//单向总线驱动器tri_bufs.v

Moduletri_bufs(en,din,dout);

Inputen;

Input[7:

0]din;

Output[7:

0]dout;

Reg[7:

0]dout;

Always@(enordin)

Begin

If(en==1’b1)

Dout<=din;

Else

Dout<=8’bzzzzzzz;

End

Endmodule

3)【例3.36】双向总线缓冲器。

//双向总线缓冲器bidir_bufs.v

Modulebidir_bufs(a,b,en,dir);

Inout[7:

0]a,b;

Inputen,dir;

Reg[7:

0]sa,sb;

Always@(aorenordir)

Begin

If(en==1’b0)

If(dir==1’b0)

Sb<=a;

Else

Sb<=8’bzzzzzzz;

End

Assignb=sb;

Always@(borenordir)

Begin

If(en==1’b0)if(dir==1’b1)

Sa<=b;

Else

Sa<=8’bzzzzzzz;

End

Assigna=sa;

Endmodule;

【例3.37】D触发器

//D触发器d_ff.v

Moduled_ff(d,clk,q,qn);

Inputd;

Inputclk;

Outputq,qn;

Regq,qn;

Always@(posedgeclk)

Begin

q<=d;

qn<=~d;

end

endmodule

【例3.38】非同步复位/置位的D触发器、

//非同步复位/置位的D触发器asynd_ff.v

Moduleasynd_ff(clk,d,preset,clr,q);

Inputclk,d,preset,clr;

Outputq;

Regq;

Always@(posedgeclk)

Begin

If(preset)

q<=1’b1;

elseif(clr)

q<=1’b0;

else

q<=d;

end

endmodule

【例3.39】同步复位的D触发器。

//同步复位的D触发器asynd_ff.v

Modulesynd_ff(clk,d,reset,q);

Inputclk,d,reset;

Outputq;

Regq;

Always@(posedgeclk)

Begin

If(reset)

q<=1b’0;

else

q<=d;

end

endmodule

【例3.40】JK触发器。

//JK触发器jk_ff.v

Modulejk_ff(j,k,c,q,qn);

Inputj,k;

Inputc;

Outputq,qn;

Regq,qn;

Always@(negedgec)

Begin

Case({j,k})

2’b00:

beginq<=q;qn<=qn;end;

2’b01:

beginq<=1’b0;qn<=1’b1;end;

2’b10:

beginq<=1’b1;qn<=1’b0;end;

2’b11:

beginq<=qn;qn<=q;end;

default:

beginq<=q;qn<=qn;end;

endcase

end

endmodule

【例3.41】T触发器

//T触发器t_ff.v

Modulet_ff(en,t,q,qn);

Inputen;

Inputt;

Outputq,qn;

Regq,qn;

Always@(posedget)

Begin

If(en==1’b1)

Begin

Qn<=q;

Q<=~q;

End

Else

Begin

Qn<=q;

Q<=qn;

End

End

Endmodule

【例3.42】8位数据寄存(锁存)器。

//8位数据寄存(锁存)器reg8.v

Modulereg8(clk,d,q);

Inputclk;

Input[7:

0]d;

Output[7:

0]q;

Regq;

Always@(posedgeclk)

Begin

Q<=d;

End

Endmodule

【例3.43】具有左移或右移1位、并行输入和同步复位功能的8位移位寄存器。

//移位寄存器sftreg8.v

Modulesftreg8(clk,reset,lsft,rsft,data,mode,qout);

Inputclk,reset;

Inputlsft,rsft;

Input[7:

0]data;

Input[1:

0]mode;

Output[7:

0]qout;

Reg[7:

0]qout;

Always@(posedgeclk)

Begin

If(reset)

Qout<=8’b00000000;

Else

Case(mode)

2’b01:

qout<={rsft,qout[7:

1]};

2’b10:

qout<={qout[6:

0],left};

2’b11:

qout<=data;

Default:

qout<=8b’00000000;

Endcase

End

Endmodule

【例3.44】带时钟使能的十进制同步计数器。

//有时钟使能的十进制同步计数器cnt10.v

Modulecnt10(clk,clr,ena,cq,co);

Inputclk;

Inputclr;

Inputena;

Output[3:

0]cq;

Outputco;

Reg[3:

0]cnt;

Regco;

//计数过程

Always@(posedgeclkorposedgeclr)

Begin

If(clr)

Cnt<=4’b0;

Else

If(ena)

If(cnt==4’h9)

Cnt<=4’h0;

Else

End

Assigncq=cnt;

//控制进位输出并去毛刺

Always@(posedgeclk)

Begin

If(cnt==4’h9)

Co=4’h1;

Else

Co=4’h0;

End

Endmodule

【例3.45】具有异步复位、同步置数功能的8421BCD码六十进制同步计数器。

//有时钟使能的十进制同步计数器cnt10.v

Modulecnt10(clk,clr,ena,cq,co);

Inputclk;

Inputclr;

Inputena;

Output[3:

0]cq;

Outputco;

Reg[3:

0]cnt;

Regco;

//计数控制过程

Always@(posedgeclkorposedgeclr)

Begin

If(clr)

Cnt<=4’b0;

Else

If(ena)

If(cnt==4’h9)

Cnt<=4’h0;

Else

Cnt<=cnt+1;

End

Assigncq=cnt;

//控制进位输出并去毛刺

Always@(pposedgeclk)

Begin

If(cnt==4’h9)

Co=4’h1;

Else

Co=4’h0;

End

Endmodule

//有时钟使能的六进制同步计数器cnt6.v

Modulecnt6(clk,clr,ena,cq,co);

Inputclk;

Inputclr;

output[3:

0]cq;

Outputco;

Reg[3:

0]cnt;

Regco;

//计数控制过程

Always@(posedgeclkorposedgeclr)

Begin

If(clr)

Cnt<=4’b0;

Else

If(ena)

If(cnt==4’h5)

Cnt<=4’h0;

Else

Cnt<=cnt+1;

End

Assigncq=cnt;

//控制进位输出并去毛刺

Always@(posedgeclk)

Begin

If(cnt==4’h5)

Co=4’h1;

Else

Co=4’h0;

End

Endmodule

//六十进制计数器cnt60a.v

Modulecnt60a(clk,clr,ena,dout);

Inputclk;

Inputclr;

Inputena;

Output[7:

0]dout;

Wires0;

Cnt10u0(.ena(ena),.clk(clk),.clr(clr),.cq(dout[3:

0]),.co(s0));

Cnt6u1(.ena(ena),.clk(s0),.clr(clr),.cq(dout[7:

4]),.co());

Endmodule

【例3.46】具有异步复位、同步置数功能的8421BCD码六十进制同步计数器。

//六十进制同步计数器cnt60b.v

Modulecnt60b(clk,reset,load,ena,d,qh,ql,co);

Inputclk;

Inputreset;

Input[7:

0]d;

Inputload;

Inputena;

Output[3:

0]qh;

Output[3:

0]ql;

Regco;

//计数控制过程

Always@(posedgeclkornegedgereset)

Begin

If(!

reset)

Begin

Qh<=4’h0;

Ql<=4’h0;

End

Else

If(load)

Begin

Qh<=d[7:

4];

Ql<=d[3:

0];

End

Else

Begin

If(ena)

If(ql==4’h9)

Begin

Ql<=4’h0;

If(qh==4’h5)

Qh<=4’h0;

Else

Qh<=qh+1;

End

Else

Ql<=ql+1;

End

End

//进位输出控制过程

Always@(qhorqlorena)

If(qh==4’h5&&q1==4’h9&&ena==1’b1)

Co<=4’h1;

Else

Co<=4’h0;

Endmodule

【例3.47】由8个D触发器构成的异步计数器。

//D触发器d_ff1.v

Moduled_ff1(clk,clr,d,q,qn);

Inputclk,clr;

Inputd;

Outputq,qn;

Regq,qn;

Regq_in;

Always@(posedgeclk)

Begin

If(clr)

Begin

Q<=q_in;

Qn<=~q_in;

End

Else

Begin

Q<=d;

Qn<=~d;

End

End

Endmodule

//由8个D触发器构成的8位计数器dcnt8.v

Moduledcnt8(clk,clr,cnt);

Inputclk;

Inputclr;

Output[7:

0]cnt;

Wire[8:

0]cnt;

Wires1,s2,s3,s4,s5,s6,s7,s8;

D_ff1uut0(.clk(clk),.clr(clr),.d(s1),.q(cnt[0]),.qn(s1));

D_ff1uut1(.clk(s1),.clr(clr),.d(s2),.q(cnt[1]),.qn(s2));

D_ff1uut2(.clk(s2),.clr(clr),.d(s3),.q(cnt[2]),.qn(s3));

D_ff1uut3(.clk(s3),.clr(clr),.d(s4),.q(cnt[3]),.qn(s4));

D_ff1uut4(.clk(s4),.clr(clr),.d(s5),.q(cnt[4]),.qn(s5));

D_ff1uut5(.clk(s5),.clr(clr),.d(s6),.q(cnt[5]),.qn(s6));

D_ff1uut6(.clk(s6),.clr(clr),.d(s7),.q(cnt[6]),.qn(s7));

D_ff1uut7(.clk(s7),.clr(clr),.d(s8),.q(cnt[7]),.qn(s8));

Endmodule

【例3.48】将1KHz的方波信号变为正、负周不等的50Hz信号的非均匀分频电路

//将1KHz的信号变为50Hz非均匀分频器fjydiv.v

Modulefjydiv(cl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 >

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1