SOC设计方法与实现实验报告.doc
- 文档编号:349290
- 上传时间:2023-04-29
- 格式:DOC
- 页数:27
- 大小:489.50KB
SOC设计方法与实现实验报告.doc
《SOC设计方法与实现实验报告.doc》由会员分享,可在线阅读,更多相关《SOC设计方法与实现实验报告.doc(27页珍藏版)》请在冰点文库上搜索。
《SOC设计方法与实现》实验报告
马亮201111857
刘家明201111856
1实验时间:
2011年11月19日—2011年12月15日
2实验目的
完成一个数字系统的VerilogHDL描述和利用EDA工具的VerilogHDL仿真综合环境对这一描述进行仿真并综合,完整地从事一个数字VLSI系统的设计过程,理解和掌握现代集成电路的设计流程、硬件描述语言综合理论等高层次设计方法以及它和物理实现之间的关系,巩固在理论课阶段学习的相关知识。
3实验平台
代码输入工具:
QuartusII
功能仿真:
ModelSimSE6.2b
综合工具:
DC,SynplifyPro8.6.2
4实验内容
设计一个数字信号处理器系统,其功能为:
在8位微控制器Intel8051的控制下对输入信号进行数字滤波处理并根据输入数据的大小产生一组控制液晶板的显示。
系统框图如下:
Intel8051是微处理器;TH99CHLS是要实现的系统。
Display是一个液晶显示板。
它包括三个显示区:
一个时间显示区,一个数字显示区和一个由16个小方块组成的信号幅度显示区。
显示面板为共阴极驱动,接高电平时对应的面板显示,接低时面板消失。
其结构见下图所示。
5:
系统简介和对应的模块划分
5.1:
系统的整体工作过程:
(1)在外部信号PEbar的控制下,芯片从端口in读入一个八位数据。
(2)在
(1)中输入的数据与微处理器给出的另一个八位数据进行按位“与”操作。
(3)在
(2)中处理过的数据经数字滤波后从端口out输出。
(4)TH99CHLS内部产生一组时间信号,包括时和分,其格式为:
(hh:
mm)。
这组时间信号的初值由微处理器给出,微处理器可以随时对时间信号进行修改。
(5)送往液晶显示板的信号有三组:
a.(4)中产生的时间信号,经七段译码后从端口hour和minute送出;
b.(3)中经数字滤波的信号,在转换成十进制并做七段译码后,百位经端口d00,十位经端口d10,个位经端口d01送出;
c.(3)中经数字滤波的信号,在经过压缩后通过端口ap送出。
5.2:
数字滤波器
数字滤波器的转移函数为:
滤波器的系数B0,B1,...,B6均由微处理器给出。
微处理器可以根据需要修改这些系数。
5.2:
系统模块说明和代码说明:
根据功能分析,将整个系统分为8个模块。
各个模块对应的源文件和功能描述如下表所示。
模块名称
对应源文件
功能说明
decoder
decoder.v
将四位二进制译码为LED显示。
输入4bit,输出为7bit直接驱动显示装置,为组合逻辑。
H2D
H2D.v
进行16进制到十进制的转换。
输入为8bit无符号数,输出为百,十,个位数字(其中每个数字4bit位宽),同样为组合逻辑
decoder_4X16
decoder_4X16
4-16译码器,主要是将经过y=sqrt(x)压缩后的数据送至显示设备。
输入4bit,输出16bit,组合逻辑。
sqrt_lut
sqrt_lut.v
主要实现y=sqrt(x)的运算。
主要是通过比较和查找表方式实现。
输入8bit,输出4bit。
时序逻辑,一个时钟周期。
mul8b_shiftadd_fsm
mul8b_shiftadd_fsm.v
乘法器设计。
通过移位加的方式实现。
内部通过状态机实现。
完成一次乘法需要8个时钟周期
timer_clk
timer_clk.v
时间时钟模块,主要是根据系统时钟计算秒。
通过计数器级联的方式实现。
filter
filter.v
这是整个系统比较核心的部分。
主要实现滤波器的设计和与微处理器的接口时序设计。
接口需要三态控制,并且要注意读写信号的控制,滤波器采用并行设计,用面积换取速度。
TH99CHLS
TH99CHLS.v
顶层元件例化。
主要是将上述各个模块进行组合。
整个功能框图如下:
6:
代码功能测试
下面是测试用的模块介绍,模拟TH99CHLS外围的单片机、控制信号和数据输入等:
模块名称
对应的源文件
功能说明
osc_rst
osc_rst.v
产生时钟频率和复位信号
fir_tb
fir_tb.v
滤波器数据的输入
wr_rd
wr_rd.v
单片机WR,RD信号的模拟
mcu
mcu.v
主要是模拟单片机对TH99CHLS芯片的控制,包括寄存器的读入与读出等一系列操作
top_test
top_test.v
顶层测试文件,主要是进行元件例化
ModelSimSE功能仿真结果波形图如下:
第一张图为前0-7us,第二张图为7us-15us.详细图形见source中的1.bmp和2.bmp.也可以查看其下的vsim.wlf(需要安装modelsim)。
此图为对TH99CHLS芯片内部b0-b6(滤波器系数)寄存器的操作和对mini,hour寄存器初始化的操作仿真结果。
7:
综合结果及分析
Synplify综合结果如下:
DC综合结果如下:
8:
所占用的资源和数据通道分析
该系统所占用的资源如下:
在滤波器设计中,并没有采用乘法器的复用,而是采用了多个乘法器的复制,牺牲面积来换取速读的提高。
综合后的频率能够达到50MHz。
滤波器的数据通道如下:
(用多个乘法器)
9:
VerilogHDL代码
///////////////////////////////////////////////////////////////////////////////////
`timescale1ns/10ps
moduletop_test();
wireclk,rst_n;
wire[7:
0]abus;
wireale,rbar_n,wbar_n,cs_n;
wirepebar_n;
wire[7:
0]fir_in;
wire[7:
0]dbus_xio;
wire[13:
0]hour,mini;
wire[20:
0]fir_out;
wire[15:
0]fir_out_sqrt;
wiresend_data_en;
fir_tbUfir_tb(send_data_en,pebar_n,fir_in);
osc_rstUost_rst(clk,rst_n);
TH99CHLSUTH99(
dbus_xio,
abus,
rbar_n,
wbar_n,
ale,
pebar_n,
fir_in,
cs_n,
rst_n,
clk,
//outputports
fir_out,
fir_out_sqrt,
hour,
mini
);
mcuUmcu(
.dbus_xio(dbus_xio),
.abus(abus),
.rbar_n(rbar_n),
.wbar_n(wbar_n),
.ale(ale),
.cs_n(cs_n),
.send_data_en(send_data_en)
);
endmodule
//////////////////////////////////////////////////////////////////
moduledecoder(
//input
hex,
//output
led
);
input[3:
0]hex;
outputreg[6:
0]led;
always@(hex)begin
case(hex)
4'b0000:
led=7'b011_1111;//0
4'b0001:
led=7'b001_1000;//1
4'b0010:
led=7'b111_0110;//2
4'b0011:
led=7'b111_1100;//3
4'b0100:
led=7'b101_1001;//4
4'b0101:
led=7'b110_1101;//5
4'b0110:
led=7'b110_1111;//6
4'b0111:
led=7'b011_1000;//7
4'b1000:
led=7'b111_1111;//8
4'b1001:
led=7'b111_1101;//9
default:
led=7'b000_0000;//null
endcase
end
endmodule
////////////////////////////////////////////////////////////////////
moduleTH99CHLS(
//input
dbus_xio,
abus,
rbar_n,
wbar_n,
ale,
pebar_n,
fir_in,
cs_n,
rst_n,
clk,
//outputports
fir_out,
fir_out_sqrt,
hour,
mini
);
inputclk,rst_n;
input[7:
0]abus;
inputale,rbar_n,wbar_n,cs_n;
inputpebar_n;
input[7:
0]fir_in;
inout[7:
0]dbus_xio;
output[13:
0]hour,mini;
output[20:
0]fir_out;
output[15:
0]fir_out_sqrt;
wire[15:
0]fir_out_Hex;
wire[7:
0]hour_Hex,mini_Hex;
wire[3:
0]fir_sqt_Hex;
wire[3:
0]hud_Hex,ten_Hex,num_Hex;
filterUfilter(.dbus_xio(dbus_xio),.abus(abus),.rbar_n(rbar_n),
.wbar_n(wbar_n),.ale(ale),.pebar_n(pebar_n),
.fir_in(fir_in),.cs_n(cs_n),.rst_n(rst_n),.clk(clk),
.fir_out(fir_out_Hex),.hour(hour_Hex),.mini(mini_Hex));
sqrt_lutUsqt(.result(fir_sqt_Hex),.in(fir_out_Hex[7:
0]),.clk(clk),.rst_n(rst_n));
decoder_4X16Ude4X16(.out(fir_out_sqrt),.in(fir_sqt_Hex));
H2DUH2d1(.hex(fir_out_Hex[7:
0]),
.hud(hud_Hex),.ten(ten_Hex),.num(num_Hex));
decoderUdecoder1(.hex(hud_Hex),.led(fir_out[20:
14]));
decoderUdecoder2(.hex(ten_Hex),.led(fir_out[13:
7]));
decoderUdecoder3(.hex(num_Hex),.led(fir_out[6:
0]));
decoderUdecoder4(.hex(hour_Hex[7:
4]),.led(hour[13:
7]));
decoderUdecoder5(.hex(hour_Hex[3:
0]),.led(hour[6:
0]));
decoderUdecoder6(.hex(mini_Hex[7:
4]),.led(mini[13:
7]));
decoderUdecoder7(.hex(mini_Hex[3:
0]),.led(mini[6:
0]));
endmodule
//////////////////////////////////////////////////////////////////////
`timescale1ns/10ps
modulewr_rd(
dbus_xio,
abus,
rbar_n,
wbar_n,
ale);
parameterMCU_CLK=40;//25MHz
parameterLL_DELAY=15;
outputreg[7:
0]abus;
outputregale,rbar_n,wbar_n;
inout[7:
0]dbus_xio;
regctrl;
reg[7:
0]abus_low;
assigndbus_xio=ctrl?
abus_low:
8'hzz;//ifctrl=1outputthenhiz
integeri;
initialbegin
rbar_n=1'b1;
wbar_n=1'b1;
end
taskwrite_register;
input[7:
0]write_addr;
input[7:
0]write_data;
//writemovx
begin
ale=1'b0;//configb0
#MCU_CLK;
ale=1'b1;
ctrl=1'b1;
#LL_DELAY;
abus_low=write_addr;
abus=8'h0;
#LL_DELAY;
ale=0;
ctrl=1'b0;//float
#MCU_CLK;
#MCU_CLK;
ctrl=1'b1;
abus_low=write_data;
#1;
wbar_n=1'b0;
for(i=0;i<8;i=i+1)
#MCU_CLK;
wbar_n=1'b1;
end
endtask
//endmovx
taskread_register;
input[7:
0]read_addr;
output[7:
0]read_data;
//readmovx
begin
ale=1'b0;//configb0
#MCU_CLK;
ale=1'b1;
ctrl=1'b1;
#LL_DELAY;
abus_low=read_addr;
abus=8'h0;
#LL_DELAY;
ale=0;
ctrl=1'b0;//float
#MCU_CLK;
#MCU_CLK;
ctrl=1'b0;
rbar_n=1'b0;
#MCU_CLK;
read_data=dbus_xio;
for(i=0;i<7;i=i+1)
#MCU_CLK;
rbar_n=1'b1;
end
endtask
endmodule
/////////////////////////////////////////////////////////////////////
moduledecoder_4X16(
//output
out,//16bitwidthhighvoltageffect
//input
in//fourbitwidth
);
input[3:
0]in;
output[15:
0]out;
assignout[15]=in[3]&in[2]&in[1]&in[0];//111115
assignout[14]=in[3]&in[2]&in[1]&(~in[0]);//111014
assignout[13]=in[3]&in[2]&(~in[1])&in[0];//110113
assignout[12]=in[3]&in[2]&(~in[1])&(~in[0]);//110012
assignout[11]=in[3]&(~in[2])&in[1]&in[0];//101111
assignout[10]=in[3]&(~in[2])&in[1]&(~in[0]);//101010
assignout[9]=in[3]&(~in[2])&(~in[1])&in[0];//10019
assignout[8]=in[3]&(~in[2])&(~in[1])&(~in[0]);//10008
assignout[7]=(~in[3])&in[2]&in[1]&in[0];//01117
assignout[6]=(~in[3])&in[2]&in[1]&(~in[0]);//01106
assignout[5]=(~in[3])&in[2]&(~in[1])&in[0];//01015
assignout[4]=(~in[3])&in[2]&(~in[1])&(~in[0]);//01004
assignout[3]=(~in[3])&(~in[2])&in[1]&in[0];//00113
assignout[2]=(~in[3])&(~in[2])&in[1]&in[0];//00102
assignout[1]=(~in[3])&(~in[2])&(~in[1])&in[0];//00011
assignout[0]=(~in[3])&(~in[2])&(~in[1])&(~in[0]);//00000
endmodule
////////////////////////////////////////////////////////////////////
modulefilter(
//inputports
dbus_xio,
abus,
rbar_n,
wbar_n,
ale,
pebar_n,
fir_in,
cs_n,
rst_n,
clk,
//outputports
fir_out,
hour,
mini,
);
inoutwire[7:
0]dbus_xio;//databusconnecttop0complexofdataandaddr
//outputreg[7:
0]dbus;
input[7:
0]abus;//addrbusconnecttop2
inputrbar_n,wbar_n;//rdandwrsignalconnecttord,weofmcu
inputale,cs_n;
inputpebar_n;
input[7:
0]fir_in;
inputclk,rst_n;
outputreg[15:
0]fir_out;
output[7:
0]hour,mini;
/**********************///aboutconfig
reg[7:
0]B0,B1,B2,B3,B4,B5,B6;
reg[7:
0]mcu_num;
reg[7:
0]abus_low;
reg[7:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SOC 设计 方法 实现 实验 报告