复杂电路编程题.docx

上传人:b****5 文档编号:11848445 上传时间:2023-04-06 格式:DOCX 页数:18 大小:37.95KB
下载 相关 举报
复杂电路编程题.docx_第1页
第1页 / 共18页
复杂电路编程题.docx_第2页
第2页 / 共18页
复杂电路编程题.docx_第3页
第3页 / 共18页
复杂电路编程题.docx_第4页
第4页 / 共18页
复杂电路编程题.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

复杂电路编程题.docx

《复杂电路编程题.docx》由会员分享,可在线阅读,更多相关《复杂电路编程题.docx(18页珍藏版)》请在冰豆网上搜索。

复杂电路编程题.docx

复杂电路编程题

1、行为描述的74LS74。

moduledff_7474(d,clk,clrn,prn,q,qn);//dff为触发器

inputd,clk,clrn,prn;

outputq,qn;

regq;

assignqn=!

q;

always@(posedgeclkornegedgeclrnornegedgeprn)

begin

if(clrn==0)

q<=0;//清0

elseif(prn==0)

q<=1;//置1

else

q<=d;//置数

end

endmodule

 

2、比较x、y的大小,位数由参数决定。

Modulecompare_n(x,y,xgy,xsy,xey);

parameterwidth=8;

input[width-1:

0]x,y;

outputxgy,xsy,xey;

regxgy,xsy,xey;

always@(xory)

begin

if(x==y)xey=1;

elsexey=0;

if(x>y)beginxgy=1;xsy=0;end

elsebeginxgy=0;xsy=1;end

end

endmodule

3、多路器(根据地址信号在多路输入中选择一路输出)

modulemux_8(addr,in1,in2,in3,in4,in5,in6,in7,in8,mout,ncs);

parameterwidth=8;

input[2:

0]addr;

inputncs;

input[width-1:

0]in1,in2,in3,in4,in5,in6,in7,in8;

output[width-1:

0]mout;

reg[width-1:

0]mout;

always@(addrorin1orin2orin3orin4orin5orin6orin7orin8orncs)

begin

if(!

ncs)//即if(ncs==0)

case(addr)

3’b000:

mout=in1;

3’b001:

mout=in2;

3’b010:

mout=in3;

3’b011:

mout=in4;

3’b100:

mout=in5;

3’b101:

mout=in6;

3’b110:

mout=in7;

3’b111:

mout=in8;

endcase

else

mout=0;

end

endmodule

 

4、参数化的奇偶校验生成器

moduleparity_g(data_in,odd_par,even_par);

parametern=4;

input[n-1:

0]data_in;

outputodd_par,even_par;

assignodd_par=^~data_in;

assigneven_par=~odd_par;

endmodule

 

5、带有异步清零端的同步4位二进制加法计数器

modulencounter(rst,clk,q);

inputrst,clk;

output[3:

0]q;

reg[3:

0]q;

always@(posedgeclkornegedgerst)

if(!

rst)

q<=0;

elseif(q==15)

q<=0;

else

q<=q+1;

endmodule

 

☆6、设计一个4位加1/减1双向同步计数器,其计数输入时钟为clk,输出为q[3:

0](以十进制计数)。

要求有1个低电平有效的使能端能ncs,1个低电平有效的清0端nrst,1个低电平有效的同步置数端load。

加1/减1控制信号s,进位/借位信号为c。

moduleudcnt(clk,nrst,d,q,ncs,s,c,load);

inputclk,nrst,ncs,s,load;

input[3:

0]d;

outputc;

output[3:

0]q;

regc;

reg[3:

0]q;

always@(posedgeclk)

if(!

nrst)beginq<=0;end

elseif(load)beginq<=d;end

elseif(s)

begin

if(q==4'b1111)

beginq<=q+1;c<=1;end

elsebeginq<=q+1;c<=0;end

end

else

begin

if(q==4'b0000)

beginq<=q-1;c<=1;end

elsebeginq<=q-1;c<=0;endend

endmodule

7、总线和总线操作

modulesampleofbus(databus,link_bus,write);//databus总线

inout[11:

0]databus;

inputlink_bus,write;

reg[11:

0]outsigs;//outsigs为挂在总线上的

reginsigs;

assigndatabus=(link_bus)?

outsigs:

12’hzzz;

always@(posedgewrite)

begin

insigs<=databus*3;//insigs为寄存器

end

endmodule

 

8、分频器的设计,16分频(采用行为级描述)

modulenfrequency(rst,clk,q,clkout);

inputrst,clk;

output[3:

0]q;

reg[3:

0]q;

always@(posedgeclkornegedgerst)

if(!

rst)

q<=0;

elseif(q==15)//可以实现16分频

q<=0;

else

q<=q+1;

endmodule

☆请设计一个模为60的BCD码加法计数器(即60s的BCD码计数器/秒表)

例8-5:

分频器的设计(同步清0)

modulenfrequency(rst,clk,q);

inputrst,clk;

output[3:

0]q;

reg[3:

0]q;

wireout;

assignout=q[3];

always@(posedgeclk)

if(!

rst)

q<=0;

elseif(q==15)//可以实现16分频

q<=0;

else

q<=q+1;

endmodule

例8-4b:

14分频器的设计(异步清0)

modulenfrequency(rst,clk,q,out);

inputrst,clk;

output[3:

0]q;

reg[3:

0]q;

regout;

always@(posedgeclkornegedgerst)

if(!

rst)

q<=0;

elseif(q==6)

beginout<=1;q<=q+1;end

elseif(q==13)

beginout<=0;q<=0;end

elseq<=q+1;

endmodule

 

9、设计一个24分频器,其输入为IN和RESET,输出为OUT。

当RESET信号为高时,OUT为低。

要求输出信号OUT的占空比为1:

2。

【分频器部分必考,参考实验部分】

modulefrequ(in,reset,out);

inputin,reset;

outputout;

regout;

reg[4:

0]cnt;

always@(posedgein)

if(reset)

beginout<=0;cnt<=0;end

elseif(cnt<8)

out<=1;

elseif((cnt>=8))

out<=0;

elseif(cnt==23)

cnt<=0;

else

cnt=cnt+1;

endmodule

10、计一个23分频器,要求输出为方波,占空比为1:

1。

11.试设计一个16位移位寄存器。

要求:

具有串行输入端din、串行输出端dout、同步并行输入端data[15:

0]、同步清零端nrst和并行输出端q[15:

0]。

并行输出端具有三态输出缓冲结构,输出允许信号为noe。

时钟信号为clk。

moduleyi_wei_jcq(din,dout,data,nrst,q,q1,clk,noe,mov,set);

inputclk,noe,din,nrst,mov,set;

input[15:

0]data;

output[15:

0]q,q1;

outputdout;

reg[15:

0]q1;

wire[15:

0]q;

regdout;

always@(posedgeclk)

if(!

nrst)

q1<=0;

elseif(set)

q1<=data;

elseif(mov)

beginq1<={q1[14:

0],din};dout<=q1[15];end

else

beginq1<={din,q1[15:

1]};dout<=q1[0];end

assignq=!

noe?

q1:

16'hzzzz;

endmodule

12、4位BCD码加减计数器

modulecounter(rst,clk,q,m);

inputrst,clk,m;

output[3:

0]q;

reg[3:

0]q;

always@(posedgeclk)

if(!

rst)

q<=0;

elseif(m==0)

if(q==9)q<=0;elseq<=q+1;

elseif(m==1)

if(q==0)q<=9;elseq<=q-1;

endmodule

13、设计一个8位线编码器,输入为D7-D0,D7优先级最高,D0最低。

当Di为高电平输入时,F=1,OUT为其编码,否则F=0。

modulecode(d,f,out);

input[7:

0]d;

outputf;output[2:

0]out;

reg[2:

0]out;regf;

always@(d)

case(d)

8’b1?

?

?

?

?

?

?

:

beginf=1;out=3’b111;end

8’b01?

?

?

?

?

?

:

beginf=1;out=3’b110;end

8’b001?

?

?

?

?

:

beginf=1;out=3’b101;end

8’b0001?

?

?

?

:

beginf=1;out=3’b100;end

8’b00001?

?

?

:

beginf=1;out=3’b011;end

8’b000001?

?

:

beginf=1;out=3’b010;end

8’b0000001?

:

beginf=1;out=3’b001;end

8’b00000001:

beginf=1;out=3’b000;end

default:

beginf=0;out=3’b000;end

endcase

endmodule

14、11111010000序列检测器

moduleshift(q,s,d,clk);

output[11:

0]q;

outputs;

inputd;

inputclk;

reg[11:

0]q;

regs;

always@(posedgeclk)

beginq<=q<<1;q[0]<=d;end

always@(posedgeclk)

if(q==12'b11111010000)

s<=1;

else

s<=0;

endmodule

15、11010100序列信号发生器。

modulegenerator(out,clk);

output[2:

0]state;

outputout;

inputclk;

reg[2:

0]state;

regout;

always@(posedgeclk)

begin

state<=state+1;

case(state)

3’b000:

out<=1;

3’b001:

out<=1;

3’b010:

out<=0;

3’b011:

out<=1;

3’b100:

out<=0;

3’b101:

out<=1;

3’b110:

out<=0;

3’b111:

out<=0;

default:

out<=0;

endcase

end

endmodule

16、设计一个位宽为8位、深度为8层的堆栈。

17、一个挂在总线上的8位寄存器。

moduleregister0(db,nce,nwe);

inout[7:

0]db;

inputnce,nwe;

reg[7:

0]q;

assigndb=(nce&&(!

nwe))?

q:

8'bzzzzzzzz;

always@(posedgenwe)

begin

if(nce==0)

q<=db;

end

endmodule

18、设计每周期8个采样点的锯齿波信号发生器。

19、设计每周期12个采样点的正弦波信号发生器。

modulesin(wave_out,clk,rst);

output[12:

0]wave_out;

inputclk,rst;

reg[3:

0]state;

reg[12:

0]wave_out;

parameters0=4'b0000,s1=4'b0001,s2=4'b0010,s3=4'b0011,s4=4'b0100,s5=4'b0101,

s6=4'b0110,s7=4'b0111,s8=4'b1000,s9=4'b1001,s10=4'b1010,s11=4'b1011;

always@(posedgeclkorposedgerst)

begin

if(rst)beginwave_out<=13'b0;state<=s0;end

else

begin

case(state)

s0:

beginwave_out<=13'd4096;state<=s1;end//4096

s1:

beginwave_out<=13'd6144;state<=s2;end//6144

s2:

beginwave_out<=13'd7643;state<=s3;end//7643

s3:

beginwave_out<=13'd8191;state<=s4;end//8191

s4:

beginwave_out<=13'7643;state<=s5;end//7643

s5:

beginwave_out<=13'6144;state<=s6;end//6144

s6:

beginwave_out<=13'd4096;state<=s7;end//4096

s7:

beginwave_out<=13'd2048;state<=s8;end//2048

s8:

beginwave_out<=13'd549;state<=s9;end//549

s9:

beginwave_out<=13'd0;state<=s10;end//0

s10:

beginwave_out<=13'd549;state<=s11;end//549

s11:

beginwave_out<=13'd2048;state<=s0;end//2048

default:

beginwave_out<=13'b00000000;state<=s0;end//0

endcase

end

end

endmodule

20.某数字系统的状态转换图如下图示。

要求以独热码状态机结构实现其功能。

moduleexample_6(x,z,clk);

inputx,clk;

outputz;

reg[4:

0]state;

regz;

parameters0=5'b00001,s1=5'b00010,s2=5'b00100,s3=5'b01000,s4=5'b10000;

always@(posedgeclk)

case(state)

s0:

if(x==1)beginstate<=s1;z<=1;end

elsebeginstate<=s4;z<=0;end

s1:

if(x==0)beginstate<=s2;z<=1;end

elsebeginstate<=s4;z<=0;end

s2:

if(x==1)beginstate<=s3;z<=0;end

elsebeginstate<=s0;z<=0;end

s3:

if(x==1)beginstate<=s2;z<=0;end

elsebeginstate<=s4;z<=1;end

s4:

if(x==1)beginstate<=s0;z<=0;end

elsebeginstate<=s4;z<=0;end

endcase

endmodule

22、试设计一个时序发生器,其输入为clock和rst,输出为t1、t2、t3和t4,相互之间的关系如下图所示。

(20分)

moduletimer(clock,rst,t1,t2,t3,t4);

outputt1,t2,t3,t4;

inputclock,rst;

regt1,t2,t3,t4;

reg[1:

0]state;

parameter

s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;

initial

begin

t1<=0;t2<=0;t3<=0;t4<=0;state<=s0;

end

always@(posedgeclock)

if(rst)

begint1<=0;t2<=0;t3<=0;t4<=0;state<=s0;end

else

begin

case(state)

s0:

begint1<=1;t2<=0;t3<=0;t4<=0;state<=s1;end

s1:

begint1<=0;t2<=1;t3<=0;t4<=0;state<=s2;end

s2:

begint1<=0;t2<=0;t3<=1;t4<=0;state<=s3;end

s3:

begint1<=0;t2<=0;t3<=0;t4<=1;state<=s0;end

default:

state<=s0;

endcase

end

endmodule

23、请设计一个32x8的RAM。

(请基于Verilog建模)

练习一.简单的组合逻辑设计

//(方法一):

//---------------文件名compare.v-----------------

modulecompare(equal,a,b);

inputa,b;

outputequal;

assignequal=(a==b)?

1:

0;

//a等于b时,equal输出为1;a不等于b时,equal输出为0。

endmodule

//(方法二):

modulecompare(equal,a,b);

inputa,b;

outputequal;

regequal;

always@(aorb)

if(a==b)//a等于b时,equal输出为1;

equal=1;

else//a不等于b时,equal输出为0。

equal=0;//思考:

如果不写else部分会产生什么逻辑?

endmodule

//-------------------------------------------------------------

//----------测试模块源代码(方法之一):

`timescale1ns/1ns//定义时间单位。

`include"./compare.v"//包含模块文件。

在有的仿真调试环境中并不需要此语句。

//而需要从调试环境的菜单中键入有关模块文件的路径和名称

modulet;

rega,b;

wireequal;

initial//initial常用于仿真时信号的给出。

begin

a=0;

b=0;

#100a=0;b=1;

#100a=1;b=1;

#100a=1;b=0;

#100a=0;b=0;

#100$stop;//系统任务,暂停仿真以便观察仿真波形。

end

comparem(.equal(equal),.a(a),.b(b));//调用被测试模块t.m

endmodule

 

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

当前位置:首页 > PPT模板 > 图表模板

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

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