- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
verilog HDL期末考试
硬件语言与FPGA期末测试
开课时间: 20~20第学期
学生姓名:班级学号:硬件语言与FPGA 期末测试
姓 名: 学号:
第一题:计数器设计
设计一个最基本的计数器,功能每个时钟上升沿实现加1的功能。(工程名cnt1+学号后两位)(10)
module cnt1_42(CLK,Q);
input CLK;
output[2:0] Q;
reg[2:0] Q1;
always@(posedge CLK)begin //实现0-4加法计数
if(Q14)
Q1=Q1+1;
else
Q1=0;
end
assign Q=Q1;
endmodule
对上诉计数器进行功能扩展,要求有复位、数据加载、加减计数选择功能(如有无法实现功能,会适当扣分)(20)
module cnt1_42(CLK,RST,LOAD,CHNG,DOUT,COUT,DATA);
input CLK,RST,LOAD,CHNG; //CLK为时钟信号,LOAD为数据加载使能, CHN为加减计数选择,COUT为进位
DOUT为输出,DATA为数据加载,RST为复 位
input[2:0] DATA;
output[2:0] DOUT;
output COUT;
reg[2:0] Q=0;
reg COUT;
always@(posedge CLK or negedge RST)begin
if(!RST)Q=0;
else if(LOAD)Q=DATA;
else if(CHNG)begin
if(Q4)
Q=Q+1;
else
Q=0;
end
else begin
if(Q0)
Q=Q-1;
else
Q=0;
end
end
always@(Q)
if(Q==3b100)
COUT=1;
else
COUT=0;
assign DOUT=Q;
endmodule
第二题:分频器设计
设计一个奇数分频器,要求可以通过参数完成任意奇数分频。(工程名div1+学号后两位)
module div1_42(CLK,K,k1,k2);
parameter M=4;
input CLK;
output K,k1,k2;
reg k1,k2;
reg[2:0] Q,S;
always@(posedge CLK)begin
if(QM)
Q=Q+1;
else
Q=0;
end
always@(negedge CLK)begin
if(SM)
S=S+1;
else
S=0;
end
always@(Q)begin
if(Q2)
k1=1;
else
k1=0;
end
always@(S)begin
if(S2)
k2=1;
else
k2=0;
end
assign K=k1|k2;
endmodule
第三题:状态机设计
使用三段状态机进行控制ADC0809的设计。(工程名sta1+学号后两位)(30)
module sta1_42(CLK,ALE,START,OE,ADDA,EOC,LOCK_T,RST,Q,D);
input CLK,RST,EOC;
input[7:0] D;
output[7:0] Q;
output ALE,START,OE,ADDA,LOCK_T;
reg[7:0] REGL;
reg LOCK,ALE,START,OE;
reg[4:0] cs,ns;
parameter s0=0,s1=1,s2=2,s3=3,s4=4;
always@(posedge CLK or posedge RST)begin
if(RST)
cs=s0;
else
cs=ns;
end
always@(posedge LOCK)begin
if(LOCK)
REGL=D;
end
always@(cs or EOC)begin
case(cs)
s0:begin ALE=0;START=0;OE=0;LOCK=0;
ns=s1; end
s1:begin ALE=1;START=1;OE=0;LOCK=0;
ns=s2; end
s2:begin ALE=0;START=0;OE=0;LOCK=0;
if(EOC)
ns=s3;
else
ns=s2;
end
s3:begin ALE=0;START=0;OE=1;LOCK=0;
ns=s4; end
s4:begin ALE=0;START=0;OE=1;LOCK=1;
文档评论(0)