- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机组成原理实验
实验一 Verilog HDL 硬件描述语言设计基础
专业班级:计算机科学与技术
学号: 0936008 姓名:冯帆
学号: 0936036 姓名:张琪
实验地点: 理工楼901
实验一 Verilog HDL 硬件描述语言设计基础
一、实验目的
学习Verilog HDL的基本语法和编程规则
掌握寄存器等常用基本数字模块的Verilog HDL描述
掌握常用寄存器的基本设计方法
掌握移位寄存器设计方法
二、实验内容
1、阅读VerilogHDL的基本语法(见PPT);
2、阅读常用基本模块的VerilogHDL描述;(见PPT);
3、完成一个常用寄存器的设计:要求寄存器位数可定制;寄存器带有输出控制端;仿真验证;封装成模块。(参阅P72-75)
4、完成一个双向移位寄存器的设计:要求寄存器位数可定制;双向时钟;仿真验证;封装成模块。(参阅P87-89)
三、实验仪器及设备:
PC机+ QuartusⅡ 9.0 + DE2-70
四、实验步骤
1、新建工程。
2、新建verilog文件。
3、分析寄存器程序代码并编译。
附代码如下:
/* 带输出控制端的寄存器*/
`define WEISHU 8
module jcq(rL,clk,cclr,d,dout,outable); //模块定义
input rL;
input clk;
input cclr;
input [`WEISHU-1:0]d;
input outable;
output [`WEISHU-1:0]dout; //输入输出定义
wire [`WEISHU-1:0]w_0;
wire [`WEISHU-1:0]w_1;
wire [`WEISHU-1:0]w_2;
wire w_3; //wire型定义
reg [`WEISHU-1:0]w_dff;
reg [`WEISHU-1:0]dout;
assign w_2=w_0|w_1;
always @(posedge clk or negedge cclr)
begin
if(!cclr)
w_dff=0;
else
w_dff=w_2;
end
always @(outable)
begin
if(outable==1)
dout=w_dff;
else
dout=8bz;
end
assign w_0=d {`WEISHU{rL}};
assign w_1={`WEISHU{w_3}} w_dff;
assign w_3=~rL;
endmodule
/*双向移位寄存器设计*/
`define N 64
module basic_shift_register( clkL,clkR, enable,sr_L_in,sr_R_in,L_or_R,sr_out);
input clkL,clkR, enable;
input sr_L_in;
input sr_R_in;
input L_or_R;
output sr_out;
// Declare the shift register
reg[`N-1:0] sr=64b1111000011110000111100001111000011110000111100001111000011110000;
reg sr_out;
wire clk;
// Shift everything over, load the incoming bit
assign clk=(L_or_R)?(clkL):(clkR);
always @ (posedge clk)
begin
if (enable == 1b1)
begin
if (L_or_R==1)
begin
sr[`N-1:1] = sr[`N-2:0];
sr[0] = sr_L_in;
sr_out = sr[`N-1];
end
else
begin
sr[`N-1:1] = sr[`N-2:0];
sr[`N-1] = sr_R_in;
sr_out = sr[0];
end
end
end
endmodule
4、仿真。
如图下:
5、将两个已经设计好的文件封装成模块。
如下图所示:
五、实验思考题
1、寄存器寄存数据的原理是什么?
在时钟边沿未到来之前,寄存器的输出保持不变,当时钟边沿到来时,寄存器的输出根据输入的变化而变化。
2、如何给寄存器加入输出控制功能?
文档评论(0)