FPGA课程设计报告
题 目: 基RAM十口8位计数器
院 系: 通信信息工程学院
专业班级: 电科班
学生姓名:
导师姓名:
起止时间: 2012910 2012921
年 月 日
FPGA课程设计报告提纲
1. 务
10×8双口RAM完成108位计数器计数器初值分1~10时钟频率1MHz计数器计数频率1Hz
FPGA开发板键作计数器计数值输出选择控制数码 (led)作选择计数器计数值输出
2. 目
采RAM实现计数器FPGA功验证
3. 环境 (软件硬件环境设备等)
前仿 modelsim 61f
仿 Quartus II 101
4. FPGA课程设计详细容
41 技术规范
功:
1. 先复位键选定RAM址中读出预置8位初值存入计数模块
2 开始键开始计数暂停键暂停计数时存入RAM中选定存储单元
3 双端口RAM10×8RAM址切换键序切换1~10址端口
4系统工作流程:
切换端口 读出数 开始计数 暂停计数 存入数
计数流程
5.切换端口 读出数 七段显示译码器译码 输出数码显示
读取结果输出流程
6. 分频:1Hz秒计时频率进行秒计时
42 设计方案
信号定义:
分频模块
Clk_50MHz
clk_1Hz
reset clk_1MHz
分频:1Hz秒计时频率进行秒计时
分频:时钟信号clk_50MHz
分频信号 clk_1Hz
分频信号 clk_1MHz
计数模块
RAM读出初值dout
clk
clk_1hz
dout [70] din[70]
start
start reset
切换端口 读出数 开始计数 暂停计数 存入数
计数:开始计数 start
计数器复位 reset
计数输出 din[70]
计数置数 add
七段显示译码器
数码
dout
显示模块
wr
[70]din
clk_50MHz
10×8RAM计数器
dout[70]
[30]wr_address
rd
[30]rd_adddress
reseteetet
start
add
RAM:10×8RAM存储阵列10字子8位
输入端 输入址 wr_address [30]
输入数 din[70]
升效写入信号 wr
输出端 输出址rd_address[30]
输出数 dout[70]
升效读信号 rd
端口
IO
功
rd
I
读高电效系统工作din数写入ram存储单元中
wr
O
写高电效ram存储单元中数读出dout
Wr_address[30]
I
写址
din[70]
I
数输入口部接口
dout[70]
O
数输出部数传送
reset
I
复位端时钟降效
add
I
计数器置数端
start
I
开始暂停键高电开始低电暂停
Rd_address[30]
I
读址
rd_clk
I
读时钟降触发
wr_clk
I
写时钟升触发
址划分:
ain[30]
Ram存储单元
0001
0000_0001
0010
0000_0010
0011
0000_0011
0100
0000_0100
0101
0000_0101
0110
0000_0110
0111
0000_0111
1000
0000_1000
1001
0000_1001
1010
0000_1010
En
数码(led)显示模块
start
RAM输入输出
1~10
clk_1hz
clk
计数模块
置数
控制
分频模块
控制模块:开始暂停返回初值计数器显示切换
43 功验证方案
(1)验证象目
验证方案描述双端口RAM计数器验证文中验证指软件工具功进行验证
双端口RAM计数器功指标详细描述请参见双端口RAM计数器技术规范doc
文描述验证程中侧重RAM数读取进行验证指标硬件验证测试程中完成
验证程中验证容:
(2)验证环境工具
根情况验证程环境工具进行:
a)windows环境ModelSim仿真工具
b)windows环境QuartusII工具
进行验证应建立仿真激励模块
(3)预确认
a系统技术参数
分析系统参数包括:引脚数目引脚工作电压电源电压系统工作频率
b系统模块数目模块实现功知道模块工作正常
c总模块验证总系统否正常工作
( 4)仿真确认:
a目
初步确认系统否完成预期设计功
先分析芯片模块连接关系图
时钟分频模块
计数模块实现计数暂停RAM间数存取
clk(50M)
en
clk_1Hz
显示模块
led显示
clk (50M)
址控制
10×8RAM
en
b逐完成模块验证
①分频模块:系统提供频率50MHz计数时需秒样计数需50MHz分频1Hz该程序编写激励输出输出频率想1Hz信号进行较验证
②计数模块:编写完成通查仿真图形确认计数范围位宽等功正确
③RAM存取模块:需仿真中编写测试激励RAM进行存取验证仿真图形中确认RAM存取功正确性
④显示模块:计数结果通七段显示译码器显示数码观察数码数字变化规律验证显示模块否正确
c验证空标志产生逻辑:
先复位信号置0(效)定时间系统否产生空标志
d验证正常情况信号:
系统运行时复位信号1(复位效)根输入信号出输出信号想信号进行较
44 电路设计源代码功仿真激励源代码功仿真结果报告
分频器模块:
module FPQ (clk_50MHzclk_1MHzresetclk_1Hz)
input clk_50MHzreset
output clk_1MHzclk_1Hz
reg clk_1Hz0
reg clk_1MH
z0
reg [310] cnt132'd0
reg [310] cnt232'd0
always@(posedge clk_50MHz or negedge reset)
begin
if(reset)
clk_1Hz<32'd0
else
begin
if(cnt132'd100)
begin
cnt1<32'd0clk_1Hz<~clk_1Hz
end
else
cnt1
end
always@(posedge clk_50MHz or negedge reset)
begin
if(reset)
clk_1MHz<32'd0
else
begin
if(cnt232'd255)
begin
cnt2<32'd0
clk_1MHz<~clk_1MHz
end
else
cnt2
end
endmodule
分频器模块激励:
module FPQ_test
reg clk_50MHzreset
wire clk_1MHzwire clk_1Hz
always # 2 clk_50MHz~clk_50MHz
FPQ fpq(reset(reset)clk_50MHz(clk_50MHz)clk_1MHz(clk_1MHz)clk_1Hz(clk_1Hz))
initial
begin
reset<0
clk_50MHz<0
#100 reset<1
end
endmodule
计数器模块:
module JSQ(startdataclk_1Hzaddc_out)
input clk_1Hzadd
input start
input [70]data
output c_out
reg [70] c_out
always@(posedge clk_1Hz or negedge add )
begin
if(add)
begin
c_out end
else
begin
if(start)
begin
c_out
begin
c_out<0
end
else
c_out
else
c_out
end
endmodule
计数器激励:
module JSQ_test
reg startadd
reg clk_1Hz
reg [70]data
wire [70] c_out
always #1 clk_1Hz~clk_1Hz
JSQ jsq(start(start)add(add)clk_1Hz(clk_1Hz)data(data)c_out(c_out))
initial
begin
clk_1Hz0
add0
start0
data8'd1
#15 add1
#15 start1
#600 start0
end
endmodule
数码显示模块:
module SMG (clk_1MHzdatadata_gdata_sdata_b)
input[70] data
input clk_1MHz
output data_b
output data_s
output data_g
reg[60]data_b
reg[60]data_s
reg[60]data_g
reg [70]mid_b
reg [70]mid_s
reg [70]mid_g
always@(posedge clk_1MHz)
begin
mid_b
always@(mid_b)
begin
case(mid_b)
7'd0data_b<7'hC0
7'd1data_b<7'hF9
7'd2data_b<7'hA4
7'd3data_b<7'hB0
7'd4data_b<7'h99
7'd5data_b<7'h92
7'd6data_b<7'h82
7'd7data_b<7'hf8
7'd8data_b<7'h80
7'd9data_b<7'h90
defaultdata_b<7'hC0
endcase
end
always@(mid_s)
begin
case(mid_s)
7'd0data_s<7'hC0
7'd1data_s<7'hF9
7'd2data_s<7'hA4
7'd3data_s<7'hB0
7'd4data_s<7'h99
7'd5data_s<7'h92
7'd6data_s<7'h82
7'd7data_s<7'hf8
7'd8data_s<7'h80
7'd9data_s<7'h90
defaultdata_s<7'hC0
endcase
end
always@(mid_g)
begin
case(mid_g)
7'd0data_g<7'hC0
7'd1data_g<7'hF9
7'd2data_g<7'hA4
7'd3data_g<7'hB0
7'd4data_g<7'h99
7'd5data_g<7'h92
7'd6data_g<7'h82
7'd7data_g<7'hf8
7'd8data_g<7'h80
7'd9data_g<7'h90
defaultdata_g<7'hC0
endcase
end
endmodule
数码显示模块激励:
module SMG_test
reg[70] data
reg clk_1MHz
wire [60]data_g
wire [60]data_s
wire [60]data_b
SMG smg(data(data)clk_1MHz(clk_1MHz)data_g(data_g)data_s(data_s)data_b(data_b))
always # 10 clk_1MHz~clk_1MHz
initial
begin
data0clk_1MHz0
#25 data35
#25 data15
#25 data93
end
endmodule
RAM模块:
module RAM(resetwrwr_clkwr_addressdinrdrd_clkrd_addressdout)
input wrwr_clkreset
input [30]wr_address
input [70]din
input rdrd_clk
input [30]rd_address
output [70]dout
reg [70]dout0
reg[70] mem [110]
always@(posedge wr_clk or negedge reset)
begin
if(reset)
begin
mem[1]<8'd1
mem[2]<8'd2
mem[3]<8'd3
mem[4]<8'd4
mem[5]<8'd5
mem[6]<8'd6
mem[7]<8'd7
mem[8]<8'd8
mem[9]<8'd9
mem[10]<8'd10
end
else
begin
if(wr)
begin
if(wr_address<4'd10)
mem[wr_address]
end
end
always@( posedge rd_clk or negedge reset)
begin
if(reset)
dout<8'd0
else
begin
if(rd)
begin
dout
end
end
endmodule
RAM模块激励:
module RAM_test
reg resetwrrd
reg wr_clkrd_clk
reg [30]wr_addressrd_address
reg [70] din
wire [70] mem [110]
wire [70] dout
RAM ram(reset(reset)wrn(wr)wr_clk(wr_clk)wr_address(wr_address)rd(rd)rd_clk(rd_clk)rd_address(rd_address)din(din)dout(dout))
always #1 wr_clk~wr_clk
always #1 rd_clk~rd_clk
initial
begin
wr_clk<0
rd_clk<0
reset0
wr<0
rd<0
wr_address<4'd0
rd_address<4'd0
din<8'd0
#15 reset<1
#15 rd<1
#25 rd_address<4'd4wr<1
#35 din<8'd5wr_address<4'd1rd_address<4'd1
#15 din<8'd8wr_address<4'd6rd_address<4'd6
#15 reset<0rd_address<4'd4
end
endmodule
顶层模块:
module RAM_count (resetaddstartclk_50MHzwrwr_addressdinrdrd_addressdata_gdata_sdata_b)
input resetaddstartwrrdclk_50MHz
input [30]wr_addressrd_address
input[70] din
output [60]data_gdata_sdata_b
wire [60] data_gdata_sdata_b
wire [70] dout
wire [70] mid_data
wire mid_clk_1Hz
wire mid_clk_1MHz
FPQ fpq(reset(reset)clk_50MHz(clk_50MHz)clk_1MHz(mid_clk_1MHz)clk_1Hz(mid_clk_1Hz))
RAM ram(reset(reset)wr(wr)wr_clk(mid_clk_1MHz)wr_address(wr_address)din(din)rd(rd)rd_clk(mid_clk_1MHz)rd_address(rd_address)dout(mid_data))
JSQ jsq(add(add)data(mid_data)clk_1Hz(mid_clk_1Hz)start(start)c_out(dout))
SMG smg(clk_1MHz(mid_clk_1Hz)data(dout)data_g(data_g)data_s(data_s)data_b(data_b))
Endmodule
顶层模块激励:
module RAM_count_test
reg resetaddstartwrrd
reg clk_50MHz
reg [30]wr_addressrd_address
reg [70] din
wire [60] data_gdata_sdata_b
RAM_count ram( reset(reset)add(add)start(start)wr(wr)rd(rd)clk_50MHz(clk_50MHz)
wr_address(wr_address) rd_address(rd_address)din(din)data_g(data_g)data_s(data_s)data_b(data_b))
always #1 clk_50MHz~clk_50MHz
initial
begin
reset1start1din1wr0rd1
wr_address4'd1rd_address4'd1clk_50MHz0
add1
# 125 reset0 # 250 reset1 #250 add0 # 250 add1
# 250 wr0rd1
# 10000 start0
# 250 wr1rd0
end
endmodule
45 综合布局布线报告引脚分布报告
综合图:
脚分配图:
时钟分配图:
46 仿真结果报告
47 硬件测试结果报告
测试结果符合设计初衷实现10×8RAM变成十8位加法器设置初始值1~10写入读出数进行加法操作
48 结果结问题讨
实验结果基符合设计求初衷体功实现细节没做规划仿真时出现部分高阻状态检查发现RAM模块中复位问题
5课程设计心体会
两周FPGA课程设计门课程更加深刻认识感受更加深入解课程学足理学实践相互结合重性电路设计初始时刻没设计电路时设计方法盲目电路模块进行设计结果设计综合时候设计模块进行利综合仿真尤数码RAM模块中出现较问题单模块测试时正确综合起时出现问题老师学帮助发现原时钟匹配问题系列修改终正确结果电路设计描述中会深刻吸取次教训
仿真时进行非常利总结出良编码惯电路综合差错影响便时处理问题做出改进方案处理逻辑错误非常时提醒详细规范电路间逻辑关系合理安排重性外模块间时序电路合理协调电路初始状态设定关重
总说两周课程设计受益匪浅学中会吸取次验帮助学生活中取更进步
6参考资料等
基VerilogFPGA设计基础杜慧敏李宥谋赵全良著 西安电子科技出版社学
Verilog HDL数字设计综合(第二版) [美] Samir Palnitkar 著 夏宇闻胡燕祥 刁岚松 等译
西安邮电学院系成绩鉴定表
学生姓名
班级学号
电科
进行时间
2012年 9 月 10 日 — 2012 年 9 月21 日
成绩鉴定
学容(20分)
教学务计划结合程度(10分)
专业培养结合程度(6分)
(4分)
接受单位评价
(20分)
实践力(10分)
学态度(6分)
学纪律(4分)
报告鉴定
(60分)
报告容实践程紧密结合(15分)
报告容教学计划容紧密结合(15分)
报告质量(题结构观点逻辑资料字数 30分)
评阅教师姓名
刘正涛
职称
成绩
评语
评阅教师签字
年 月 日
西安邮电学院 系 程考核表
学生姓名
班级学号
电科
承担务实验室(单位)
2#实验楼
部门
实施时间
2012年 9月10 日 — 2012 年9 月21日
具体容
第周
进行设计规范具体设计方案构思报告形式写出
第二周
进行相关模块程序编写仿真综合仿真
……
指导教师(师傅)姓名
刘正涛
职务职称
指导教师(师傅)
学生评价
学态度
□ 认真 □ 般 □ 认真
学纪律
□ 全勤 □ 偶尔缺勤 □ 常缺勤
实践力
□ 强 □ 般 □ 较差
指导教师(师傅)学生专业知识社会实践力等情况意见
指导教师(师傅)签字
年 月 日
西an邮电学院
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档