#verilogFPGA实例文档格式.docx

上传人:b****5 文档编号:20749415 上传时间:2023-01-25 格式:DOCX 页数:87 大小:38.41KB
下载 相关 举报
#verilogFPGA实例文档格式.docx_第1页
第1页 / 共87页
#verilogFPGA实例文档格式.docx_第2页
第2页 / 共87页
#verilogFPGA实例文档格式.docx_第3页
第3页 / 共87页
#verilogFPGA实例文档格式.docx_第4页
第4页 / 共87页
#verilogFPGA实例文档格式.docx_第5页
第5页 / 共87页
点击查看更多>>
下载资源
资源描述

#verilogFPGA实例文档格式.docx

《#verilogFPGA实例文档格式.docx》由会员分享,可在线阅读,更多相关《#verilogFPGA实例文档格式.docx(87页珍藏版)》请在冰豆网上搜索。

#verilogFPGA实例文档格式.docx

input[3:

b1111_1111。

begin

if(a>

9>

y<

=a+6。

//这里完成了二进制到十进制的译码,

else

=a。

end

//为了方便在平台上进行观察验证

///这里把数据的个位和十位分别用4个LED进行显示,均为二进制

Endmodule

实验3BCD码—七段数码管显示译码器

moduledecode4_7(decodeout,a>

output[6:

0]decodeout。

input[3:

reg[6:

always@(a>

case(a>

//用case语句进行译码abcdefg

4'

h0:

decodeout=7'

b1111110。

h1:

b0110000。

h2:

b1101101。

h3:

b1111001。

h4:

b0110011。

h5:

b1011011。

h6:

b1011111。

h7:

b1110000。

h8:

b1111111。

h9:

b1111011。

ha:

b1110111。

4'

hb:

b0011111。

hc:

b1001110。

hd:

b0111101。

he:

b1001111。

hf:

b1000111。

default:

decodeout=7'

bx。

endcase

实验48-3编码器

//a8-3coder

modulecoder(dout,din>

output[2:

0]dout。

input[7:

0]din。

reg[2:

always@(din>

case(din>

8'

b1111_1110:

dout<

=3'

b000。

b1111_1101:

b001。

b1111_1011:

b010。

b1111_0111:

b011。

b1110_1111:

b100。

b1101_1111:

b101。

b1011_1111:

b110。

b0111_1111:

b111。

default:

endmodule

实验58-3优先编码器

moduleencoder(d0,d1,d2,d3,d4,d5,d6,d7,x,y,v>

outputx,y,v。

inputd0,d1,d2,d3,d4,d5,d6,d7。

regx,y,v。

always@(d0ord1ord2ord3ord4ord5ord6ord7>

if(d7==0>

{x,y,v}=3'

b111。

elseif(d6==0>

b110。

elseif(d5==0>

b101。

elseif(d4==0>

b100。

elseif(d3==0>

b011。

elseif(d2==0>

b010。

elseif(d1==0>

b001。

elseif(d0==0>

b000。

bxxx。

实验6十—二进制编码器

//decimaltobinaryencoder

moduleencoder(y,a>

output[4:

0]y。

input[4:

//input[4]为十位,[3:

0]为个位?

reg[4:

always@(a>

//A是敏感信号

begin

=a-6。

//这里完成了十进制到二进制的编码,

end

///这里把数据的个位用4个2进制数据表示,十位用1bit进行显示;

实验7三选一数据选择器

modulemux3to1(dout,a,b,c,sel>

output[1:

input[1:

0]a,b,c。

input[1:

0]sel。

reg[1:

//RTLmodeling

always@(aorborcorsel>

case(sel>

2'

b00:

b01:

=b。

b10:

=c。

dout<

=2'

实验8半加器

//数据流方式描述的1位半加器

modulehalfadder(sum,cout,a,b>

inputa,b。

outputsum,cout。

assignsum=a^b。

assigncout=a&

b。

//carryout。

附录:

各种不同的描述方式:

1,调用门元件实现的1位半加器

modulehalf_add1(a,b,sum,cout>

and(cout,a,b>

xor(sum,a,b>

2,采用行为描述的1位半加器

modulehalf_add3(a,b,sum,cout>

regsum,cout。

always@(aorb>

begincase({a,b}>

//真值表描述

b00:

beginsum=0。

cout=0。

b01:

beginsum=1。

b10:

b11:

cout=1。

end

3,采用行为描述的1位半加器

modulehalf_add4(a,b,sum,cout>

sum=a^b。

cout=a&

实验9全加器

//1bitfulladder1位全加器

modulefull_add(a,b,cin,sum,cout>

inputa,b,cin。

assign{cout,sum}=a+b+cin。

各种不同的描述方式实现的1位全加器

1,调用门元件实现的1位全加器

modulefull_add1(a,b,cin,sum,cout>

wires1,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>

2数据流描述的1位全加器

modulefull_add2(a,b,cin,sum,cout>

assignsum=a^b^cin。

assigncout=(a&

b>

|(b&

cin>

|(cin&

a>

3行为描述的1位全加器

modulefull_add4(a,b,cin,sum,cout>

//在always块中被赋值的变量应定义为reg型

regm1,m2,m3。

always@(aorborcin>

sum=(a^b>

^cin。

m1=a&

b。

m2=b&

cin。

m3=a&

cout=(m1|m2>

|m3。

4混合描述的1位全加器

modulefull_add5(a,b,cin,sum,cout>

regcout,m1,m2,m3。

wires1。

xorx1(s1,a,b>

//调用门元件

//always块语句

cout=(m1|m2>

|m3。

assignsum=s1^cin。

//assign持续赋值语句

实验10半减器

modulehalf_sub(diff,sub_out,x,y>

outputdiff,sub_out。

inputx,y。

regdiff,sub_out。

//行为描述

always@(xory>

case({x,y}>

2'

begindiff=0。

sub_out=0。

begindiff=1。

sub_out=1。

b11:

begindiff=x。

sub_out=x。

endmodule

实验11全减器

modulefull_sub(diff,sub_out,x,y,sub_in>

inputx,y,sub_in。

always@(xoryorsub_in>

case({x,y,sub_in}>

3'

实验12多位数值比较器

modulecomp(ABB,AEB,ASB,A,B,I1,I2,I3>

outputABB,AEB,ASB。

//ABB表示A>

BAEB表示A=B,ASB表示A<

B。

0]A,B。

inputI1,I2,I3。

//I1表示上一级的A>

BI2表示上一级的A=B,I3表示上一级的A<

regABB,AEB,ASB。

always@(AorBorI1orI2orI3>

if(A>

B>

{ABB,AEB,ASB}=3'

elseif(A<

else//A=B,但是考虑到前一级的情况

beginif(I1>

//I1表示上一级的A>

B

{ABB,AEB,ASB}=3'

elseif(I3>

//I3表示上一级的A<

实验13奇偶校验

//奇偶校验位产生器

moduleparity(even_bit,odd_bit,input_bus>

outputeven_bit,odd_bit。

input[7:

0]input_bus。

assignodd_bit=^input_bus。

//产生奇校验位

assigneven_bit=~odd_bit。

//产生偶校验位

实验14补码生成

modulecompo(d_out,d_in>

0]d_out。

0]d_in。

reg[7:

always@(d_in>

if(d_in[7]==1'

b0>

//正数,最高位为符号位,0说明是正数,正数补码是其本身

d_out=d_in。

else//负数

d_out={d_in[7],~d_in[6:

0]+1'

b1}。

//最高位符号位不变,数据位加一构成其补码

实验158位硬件加法器的设计

//8位硬件加法器

moduleadd8b(cout,sum,a,b,cin>

output[7:

0]sum。

outputcout。

0]a,b。

inputcin。

实验164位并行乘法器

//4位并行乘法器

modulemult(outcome,a,b>

parametersize=4。

input[size:

1]a,b。

//两个操作数

output[2*size:

1]outcome。

//结果

assignoutcome=a*b。

//乘法运算符

实验17七人表决器

//for语句描述的七人投票表决器

modulevoter7(pass,vote>

outputpass。

//通过为高电平,否则为低电平

input[6:

0]vote。

//7个投票输入#通过为高,否定为低

reg[2:

integeri。

regpass。

always@(vote>

sum=0。

for(i=0。

i<

=6。

i=i+1>

//for语句

if(vote[i]>

sum=sum+1。

if(sum[2]>

pass=1。

//若超过4人赞成,则pass=1

elsepass=0。

实验18格雷码变换

moduleBIN2GARY(EN,DATA_IN,DATA_OUT>

inputEN。

input[3:

0]DATA_IN。

output[3:

0]DATA_OUT。

assignDATA_OUT[0]=(DATA_IN[0]^DATA_IN[1]>

&

&

EN。

assignDATA_OUT[1]=(DATA_IN[1]^DATA_IN[2]>

assignDATA_OUT[2]=(DATA_IN[2]^DATA_IN[3]>

assignDATA_OUT[3]=DATA_IN[3]&

二、时序逻辑实验

实验1D触发器

modulemyDFF(q,qn,d,clk,set,reset>

inputd,clk,set,reset。

outputq,qn。

regq,qn。

always@(posedgeclk>

if(reset>

q<

=0。

qn<

=1。

//同步清0,高电平有效

elseif(set>

=1。

=0。

//同步置1,高电平有效

elsebegin

=d。

=~d。

实验2JK触发器

//带异步清0、异步置1的JK触发器

moduleJK_FF(CLK,J,K,Q,RS,SET>

inputCLK,J,K,SET,RS。

outputQ。

regQ。

always@(posedgeCLKornegedgeRSornegedgeSET>

RS>

Q<

=1'

b0。

elseif(!

SET>

b1。

elsecase({J,K}>

=Q。

=~Q。

Q<

实验3四位移位寄存器

//4位移位寄存器

moduleshifter(din,clk,clr,dout>

inputdin,clk,clr。

output[3:

reg[3:

if(clr>

=4'

dout<

=dout<

<

1。

//输出信号左移一位

dout[0]<

=din。

//输入信号补充到输出信号的最低位

//分频器部分,获得便于实验观察的时钟信号

moduleclk_div(clk_out,clk_in>

inputclk_in。

outputclk_out。

regclk_out。

reg[25:

0]counter。

//50_000_000=1011_1110_1011_1100_0010_0000_00

parametercnt=50_000_000。

///50MHzisthesysclk,50_000_000=2FAF080

always@(posedgeclk_in>

counter<

=counter+1。

if(counter==cnt/2-1>

clk_out<

=!

clk_out。

实验4异步计数器

//行为描述方式实现的4位异步计数器

modulecounter(clk,clr,q0,q1,q2,q3>

inputclk,clr。

outputq0,q1,q2,q3。

regq0,q1,q2,q3。

//regq0_t,q1_t,q2_t,q3_t。

regq0_r,q1_r,q2_r,q3_r。

always@(posedgeclkornegedgeclr>

clr>

q0_r<

q0_r<

q0_r。

always@(posedgeq0_rornegedgeclr>

q1_r

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

当前位置:首页 > 经管营销 > 人力资源管理

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

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