SOC设计方法与实现实验报告Word下载.doc

上传人:wj 文档编号:468298 上传时间:2023-04-29 格式:DOC 页数:27 大小:489.50KB
下载 相关 举报
SOC设计方法与实现实验报告Word下载.doc_第1页
第1页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第2页
第2页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第3页
第3页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第4页
第4页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第5页
第5页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第6页
第6页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第7页
第7页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第8页
第8页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第9页
第9页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第10页
第10页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第11页
第11页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第12页
第12页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第13页
第13页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第14页
第14页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第15页
第15页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第16页
第16页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第17页
第17页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第18页
第18页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第19页
第19页 / 共27页
SOC设计方法与实现实验报告Word下载.doc_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

SOC设计方法与实现实验报告Word下载.doc

《SOC设计方法与实现实验报告Word下载.doc》由会员分享,可在线阅读,更多相关《SOC设计方法与实现实验报告Word下载.doc(27页珍藏版)》请在冰点文库上搜索。

SOC设计方法与实现实验报告Word下载.doc

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

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;

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

b0001:

b001_1000;

//1

b0010:

b111_0110;

//2

b0011:

b111_1100;

//3

b0100:

b101_1001;

//4

b0101:

b110_1101;

//5

b0110:

b110_1111;

//6

b0111:

b011_1000;

//7

b1000:

b111_1111;

//8

b1001:

b111_1101;

//9

default:

b000_0000;

//null

endcase

end

////////////////////////////////////////////////////////////////////

moduleTH99CHLS(

//input

inputclk,rst_n;

input[7:

inputale,rbar_n,wbar_n,cs_n;

inputpebar_n;

inout[7:

output[13:

output[20:

output[15:

wire[15:

0]fir_out_Hex;

wire[7:

0]hour_Hex,mini_Hex;

wire[3:

0]fir_sqt_Hex;

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:

decoderUdecoder5(.hex(hour_Hex[3:

0]),.led(hour[6:

decoderUdecoder6(.hex(mini_Hex[7:

4]),.led(mini[13:

decoderUdecoder7(.hex(mini_Hex[3:

0]),.led(mini[6:

//////////////////////////////////////////////////////////////////////

`timescale1ns/10ps

modulewr_rd(

dbus_xio,

abus,

rbar_n,

wbar_n,

ale);

parameterMCU_CLK=40;

//25MHz

parameterLL_DELAY=15;

outputreg[7:

outputregale,rbar_n,wbar_n;

inout[7:

regctrl;

reg[7:

0]abus_low;

assigndbus_xio=ctrl?

abus_low:

8'

hzz;

//ifctrl=1outputthenhiz

integeri;

initialbegin

rbar_n=1'

b1;

wbar_n=1'

taskwrite_register;

input[7:

0]write_addr;

0]write_data;

//writemovx

begin

ale=1'

b0;

//configb0

#MCU_CLK;

ctrl=1'

#LL_DELAY;

abus_low=write_addr;

abus=8'

h0;

ale=0;

//float

abus_low=write_data;

#1;

wbar_n=1'

for(i=0;

i<

8;

i=i+1)

endtask

//endmovx

taskread_register;

0]read_addr;

output[7:

0]read_data;

//readmovx

abus_low=read_addr;

rbar_n=1'

read_data=dbus_xio;

7;

endtask

/////////////////////////////////////////////////////////////////////

moduledecoder_4X16(

//output

out,//16bitwidthhighvoltageffect

//input

in//fourbitwidth

);

0]in;

output[15:

0]out;

assignout[15]=in[3]&

in[2]&

in[1]&

in[0];

//111115

assignout[14]=in[3]&

(~in[0]);

//111014

assignout[13]=in[3]&

(~in[1])&

//110113

assignout[12]=in[3]&

//110012

assignout[11]=in[3]&

(~in[2])&

//101111

assignout[10]=in[3]&

//101010

assignout[9]=in[3]&

//10019

assignout[8]=in[3]&

//10008

assignout[7]=(~in[3])&

//01117

assignout[6]=(~in[3])&

//01106

assignout[5]=(~in[3])&

//01015

assignout[4]=(~in[3])&

//01004

assignout[3]=(~in[3])&

//00113

assignout[2]=(~in[3])&

//00102

assignout[1]=(~in[3])&

//00011

assignout[0]=(~in[3])&

//00000

endmodule

modulefilter(

//inputports

mini,

inoutwire[7:

//databusconnecttop0complexofdataandaddr

//outputreg[7:

0]dbus;

input[7:

//addrbusconnecttop2

inputrbar_n,wbar_n;

//rdandwrsignalconnecttord,weofmcu

inputale,cs_n;

inputpebar_n;

inputclk,rst_n;

outputreg[15:

output[7:

/**********************///aboutconfig

0]B0,B1,B2,B3,B4,B5,B6;

0]mcu_num;

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2