首页 《SOC 设计方法与实现》实验报告(可编辑)

《SOC 设计方法与实现》实验报告(可编辑)

举报
开通vip

《SOC 设计方法与实现》实验报告(可编辑)《SOC 设计方法与实现》实验报告(可编辑) 《SOC 设计方法与实现》实验报告 《SOC 设计方法与实现》实验报告 马 亮201111857 刘家明201111856 1 实验时间:2011年11月19日―2011年12月15日 2 实验目的 完成一个数字系统的Verilog HDL描述和利用EDA工具的Verilog HDL仿真综合环境对这一描述进行仿真并综合,完整地从事一个数字VLSI系统的设计过程,理解和掌握现代集成电路的设计流程、硬件描述语言综合理论等高层次设计方法以及它和物理实现之间的关系...

《SOC 设计方法与实现》实验报告(可编辑)
《SOC 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 方法与实现》实验报告(可编辑) 《SOC 设计方法与实现》实验报告 《SOC 设计方法与实现》实验报告 马 亮201111857 刘家明201111856 1 实验时间:2011年11月19日―2011年12月15日 2 实验目的 完成一个数字系统的Verilog HDL描述和利用EDA工具的Verilog HDL仿真综合环境对这一描述进行仿真并综合,完整地从事一个数字VLSI系统的设计过程,理解和掌握现代集成电路的设计流程、硬件描述语言综合理论等高层次设计方法以及它和物理实现之间的关系,巩固在理论课阶段学习的相关知识 。 3 实验平台 代码输入工具: QuartusII 功能仿真: ModelSim SE 6.2b 综合工具:DC,Synplify Pro 8.6.2 4 实验内容 设计一个数字信号处理器系统,其功能为:在8位微控制器 Intel8051的控制下对输入信号进行数字滤波处理并根据输入数据的大小产生一组控制液晶板的显示。系统框图如下: Intel8051 是微处理器; TH99CHLS 是要实现的系统。Display 是一个液晶显示板。它包括三个显示区:一个时间显示区,一个数字显示区和一个由16个小方块组成的信号幅度显示区。显示面板为共阴极驱动,接高电平时对应的面板显示,接低时面板消失。其结构见下图所示。 5:系统简介和对应的模块划分 5.1:系统的整体工作过程: 1 在外部信号PEbar的控制下,芯片从端口in读入一个八位数据。 2 在 1 中输入的数据与微处理器给出的另一个八位数据进行按位“与”操作。 3 在 2 中处理过的数据经数字滤波后从端口out输出。 4 TH99CHLS 内部产生一组时间信号,包括时和分,其 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 为: hh:mm 。这组时间信号的初值由微处理器给出,微处理器可以随时对时间信号进行修改。 5 送往液晶显示板的信号有三组: a. 4 中产生的时间信号,经七段译码后从端口hour和minute送出; b. 3 中经数字滤波的信号,在转换成十进制并做七段译码后,百位经端口d00,十位经端口d10,个位经端口d01送出; c. 3 中经数字滤波的信号,在经过压缩后通过端口ap送出。 5.2: 数字滤波器 数字滤波器的转移 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数为: 滤波器的系数B0,B1,...,B6均由微处理器给出。微处理器可以根据需要修改这些系数。 5.2:系统模块说明和代码说明: 根据功能 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,将整个系统分为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:Verilog HDL代码 /////////////////////////////////////////////////////// //////////////////////////// `timescale 1ns/10ps module top_test ; wire clk,rst_n; wire [7:0] abus; wire ale,rbar_n,wbar_n,cs_n; wire pebar_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; wire send_data_en; fir_tb Ufir_tb send_data_en,pebar_n,fir_in ; osc_rst Uost_rst clk,rst_n ; TH99CHLS UTH99 dbus_xio, abus, rbar_n, wbar_n, ale, pebar_n, fir_in, cs_n, rst_n, clk, //output ports fir_out, fir_out_sqrt, hour, mini ; mcu Umcu .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 /////////////////////////////////////////////////////// /////////// module decoder //input hex, //output led ; input [3:0] hex; output reg [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 /////////////////////////////////////////////////////// ///////////// module TH99CHLS //input dbus_xio, abus, rbar_n, wbar_n, ale, pebar_n, fir_in, cs_n, rst_n, clk, //output ports fir_out, fir_out_sqrt, hour, mini ; input clk,rst_n; input [7:0] abus; input ale,rbar_n,wbar_n,cs_n; input pebar_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; filter Ufilter .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_lut Usqt .result fir_sqt_Hex ,.in fir_out_Hex[7:0] ,.clk clk ,.rst_n rst_n ; decoder_4X16 Ude4X16 .out fir_out_sqrt ,.in fir_sqt_Hex ; H2D UH2d1 .hex fir_out_Hex[7:0] , .hud hud_Hex ,.ten ten_Hex ,.num num_Hex ; decoder Udecoder1 .hex hud_Hex ,.led fir_out[20:14] ; decoder Udecoder2 .hex ten_Hex ,.led fir_out[13:7] ; decoder Udecoder3 .hex num_Hex ,.led fir_out[6:0] ; decoder Udecoder4 .hex hour_Hex[7:4] ,.led hour[13:7] ; decoder Udecoder5 .hex hour_Hex[3:0] ,.led hour[6:0] ; decoder Udecoder6 .hex mini_Hex[7:4] ,.led mini[13:7] ; decoder Udecoder7 .hex mini_Hex[3:0] ,.led mini[6:0] ; endmodule /////////////////////////////////////////////////////// /////////////// `timescale 1ns/10ps module wr_rd dbus_xio, abus, rbar_n, wbar_n, ale ; parameter MCU_CLK 40;//25MHz parameter LL_DELAY 15; output reg [7:0] abus; output reg ale,rbar_n,wbar_n; inout [7:0] dbus_xio; reg ctrl; reg [7:0] abus_low; assign dbus_xio ctrl?abus_low:8'hzz; //if ctrl 1 output then hiz integer i; initial begin rbar_n 1'b1; wbar_n 1'b1; end task write_register; input [7:0] write_addr; input [7:0] write_data; //write movx begin ale 1'b0;//config b0 #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 //end movx task read_register; input [7:0] read_addr; output [7:0] read_data; //read movx begin ale 1'b0;//config b0 #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 /////////////////////////////////////////////////////// ////////////// module decoder_4X16 // output out, //16 bit width high voltag effect //input in //four bit width ; input [3:0] in; output [15:0] out; assign out[15] in[3] & in[2] & in[1] & in[0]; //1111 15 assign out[14] in[3] & in[2] & in[1] & ~in[0] ; //1110 14 assign out[13] in[3] & in[2] & ~in[1] & in[0]; //1101 13 assign out[12] in[3] & in[2] & ~in[1] & ~in[0] ; //1100 12 assign out[11] in[3] & ~in[2] & in[1] & in[0]; //1011 11 assign out[10] in[3] & ~in[2] & in[1] & ~in[0] ; //1010 10 assign out[9] in[3] & ~in[2] & ~in[1] & in[0]; //1001 9 assign out[8] in[3] & ~in[2] & ~in[1] & ~in[0] ; //1000 8 assign out[7] ~in[3] & in[2] & in[1] & in[0]; //0111 7 assign out[6] ~in[3] & in[2] & in[1] & ~in[0] ; //0110 6 assign out[5] ~in[3] & in[2] & ~in[1] & in[0]; //0101 5 assign out[4] ~in[3] & in[2] & ~in[1] & ~in[0] ; //0100 4 assign out[3] ~in[3] & ~in[2] & in[1] & in[0]; //0011 3 assign out[2] ~in[3] & ~in[2] & in[1] & in[0]; //0010 2 assign out[1] ~in[3] & ~in[2] & ~in[1] & in[0]; //0001 1 assign out[0] ~in[3] & ~in[2] & ~in[1] & ~in[0] ; //0000 0 endmodule //////////////////////////////////////////////////////////////////// module filter // input ports dbus_xio, abus, rbar_n, wbar_n, ale, pebar_n, fir_in, cs_n, rst_n, clk, //output ports fir_out, hour, mini, ; inout wire [7:0] dbus_xio; //data bus connect to p0 complex of data and addr //output reg [7:0] dbus; input [7:0] abus; //addr bus connect to p2 input rbar_n,wbar_n; //rd and wr signal connect to rd,we of mcu input ale,cs_n; input pebar_n; input [7:0] fir_in; input clk,rst_n; output reg [15:0] fir_out; output [7:0] hour,mini; /**********************/ //about config reg [7:0] B0,B1,B2,B3,B4,B5,B6; reg [7:0] mcu_num; reg [7:0] abus_low; reg [7:0] hour,mini; reg [7:0] dbus; reg timer_clr_n; wire [15:0] abus_inner; // wire [7:0] dbus_in; /******************/ //reg about fir reg [7:0] fir_in_reg[6:0]; wire [15:0] mul_out[6:0]; reg start; wire [6:0] mul_out_en; wire mul_out_en_all; wire [7:0] fir_in_inner; integer i; /*****************************/ assign fir_in_inner fir_in&mcu_num; assign abus_inner abus,abus_low ; assign dbus_xio rbar_n?8'hzz:dbus; // /******************************************/ /* always @ posedge clk or rst_n begin //latch the address like 373 if !rst_n begin abus_low 8'b0; end else begin if ale& !cs_n //cs_n 0 and ale 1 latch the address of P0 abus_low dbus_in; end end*/ //latch not flip_flop always @ ale or dbus_xio or cs_n begin if ale 1'b1 & !cs_n abus_low dbus_xio; end /***************************************/ always @ posedge clk or negedge rst_n begin //config the register if !rst_n begin B0 8'b0;B1 8'b0;B2 8'b0; B3 8'b0;B4 8'b0;B5 8'b0;B6 8'b0; end else begin if ! cs_n|wbar_n begin //cs_n 0 and wbar_n 0 write case abus_inner[3:0] 4'b0000:B0 dbus_xio; 4'b0001:B1 dbus_xio; 4'b0010:B2 dbus_xio; 4'b0011:B3 dbus_xio; 4'b0100:B4 dbus_xio; 4'b0101:B5 dbus_xio; 4'b0110:B6 dbus_xio; 4'b0111:mcu_num dbus_xio; // default:version dbus_xio; endcase end end end /*******************************************/ always @ posedge clk or negedge rst_n begin //read the register if !rst_n begin dbus 8'h0; end else if ! cs_n|rbar_n begin //cs_n 0 and wbar_n 0 write case abus_inner[3:0] 4'b0000:dbus B0; 4'b0001:dbus B1; 4'b0010:dbus B2; 4'b0011:dbus B3; 4'b0100:dbus B4; 4'b0101:dbus B5; 4'b0110:dbus B6; 4'b0111:dbus mcu_num; 4'b1000:dbus mini; 4'b1001:dbus hour; default:dbus 8'b0;//version endcase end end /********************************///input the num reg pebar1; wire in_enable; always @ posedge clk or negedge rst_n begin if !rst_n begin pebar1 1'b0; end else begin pebar1 pebar_n; end end assign in_enable pebar1& ~pebar_n ; always @ posedge clk or negedge rst_n begin if !rst_n begin for i 0;i 7;i i+1 fir_in_reg[i] 8'b0; start 1'b0; end else if in_enable begin fir_in_reg[0] fir_in_inner; for i 0;i 6;i i+1 fir_in_reg[i+1] fir_in_reg[i]; start 1'b1; end else begin start 1'b0; end end /********************************/ mul8b_shiftadd_fsm U0 .mul_out mul_out[0] , .mul_out_en mul_out_en[0] , .mul_ina B0 , .mul_inb fir_in_reg[0] , .clk clk , .start start , .rst_n rst_n ; mul8b_shiftadd_fsm U1 .mul_out mul_out[1] , .mul_out_en mul_out_en[1] , .mul_ina B1 , .mul_inb fir_in_reg[1] , .clk clk , .start start , .rst_n rst_n ; mul8b_shiftadd_fsm U2 .mul_out mul_out[2] , .mul_out_en mul_out_en[2] , .mul_ina B2 , .mul_inb fir_in_reg[2] , .start start , .clk clk , .rst_n rst_n ; mul8b_shiftadd_fsm U3 .mul_out mul_out[3] , .mul_out_en mul_out_en[3] , .mul_ina B3 , .mul_inb fir_in_reg[3] , .start start , .clk clk , .rst_n rst_n ; mul8b_shiftadd_fsm U4 .mul_out mul_out[4] , .mul_out_en mul_out_en[4] , .mul_ina B4 , .mul_inb fir_in_reg[4] , .start start , .clk clk , .rst_n rst_n ; mul8b_shiftadd_fsm U5 .mul_out mul_out[5] , .mul_out_en mul_out_en[5] , .mul_ina B5 , .mul_inb fir_in_reg[5] , .start start , .clk clk , .rst_n rst_n ; mul8b_shiftadd_fsm U6 .mul_out mul_out[6] , .mul_out_en mul_out_en[6] , .mul_ina B6 , .mul_inb fir_in_reg[6] , .start start , .clk clk , .rst_n rst_n ; assign mul_out_en_all &mul_out_en; wire [15:0] add_mul12 mul_out[1]+mul_out[2]; wire [15:0] add_mul34 mul_out[3]+mul_out[4]; wire [15:0] add_mul56 mul_out[5]+mul_out[6]; wire [15:0] add_mul012 add_mul12+mul_out[0]; wire [15:0] add_mul3456 add_mul34+add_mul56; always @ posedge clk or negedge rst_n begin if !rst_n begin fir_out 16'b0; end else if mul_out_en_all begin fir_out add_mul012+add_mul3456; end end //timer parts wire minite; timer_clk timer1 .clk clk ,.rst_n rst_n , .clr_n timer_clr_n ,.clk_minite minite ; always @ posedge clk or negedge rst_n begin if !rst_n timer_clr_n 1'b0; else if ! cs_n|wbar_n & abus_inner[3:0] 4'b1000 timer_clr_n 1'b0; else timer_clr_n 1; end always @ posedge clk or negedge rst_n begin if !rst_n begin hour 8'b0; mini 8'b0; end else if ! cs_n|wbar_n begin //cs_n 0 and wbar_n 0 write case abus_inner[3:0] 4'b1000:mini dbus_xio; 4'b1001:hour dbus_xio; endcase end else if minite begin if mini[3:0] 4'b1001 begin mini[3:0] 4'b0; if mini[7:4] 4'b0101 begin mini[7:4] 4'b0; if hour[7:4]! 4'b0010 begin if hour[3:0] 4'b1001 begin hour[3:0] 4'b0000; hour[7:4] hour[7:4]+1'b1; end else hour[3:0] hour[3:0]+1'b1; end else begin //hour[7:4] 4'b0010 if hour[3:0] 4'b0011 begin hour[3:0] 4'b0000; hour[7:4] 4'b0000; end else hour[3:0] hour[3:0]+1'b1; end end else mini[7:4] mini[7:4]+1'b1; end else begin mini[3:0] mini[3:0]+1'b1; end end end endmodule /////////////////////////////////////////////////////// /////////////// `timescale 1ns/10ps module fir_tb // send_data_en, //output pebar_n, fir_in, ; input send_data_en; output reg pebar_n; output reg [7:0] fir_in; reg [7:0] fir_tmp[6:0]; integer i,j; initial begin pebar_n 1'b1; for i 0;i 7;i i+1 fir_tmp[i] 8'h50+i; end initial begin wait send_data_en ; for i 0;i 7;i i+1 begin fir_in fir_tmp[i]; pebar_n 1'b0; //negedge #22; pebar_n 1'b1; #300; //wait for filter end end end endmodule /////////////////////////////////////////////////////// ////////////// //16进制转化为十进制 module H2D //input hex, //output hud, ten, num ; input [7:0] hex; output reg [3:0] hud,ten,num; wire [8:0] shex,sub100,sub200; reg [7:0] hex_inner; assign shex 1'b0,hex ; assign sub100 shex-9'h64; //100 assign sub200 shex-9'hc8; //200 always @ sub100 or sub200 or hex begin if !sub200[8] begin // 200 hud 4'b0010; hex_inner sub200[7:0]; end else if !sub100[8] begin // 100 hud 4'b0001; hex_inner sub100[7:0]; end else begin hud 4'b0000; hex_inner hex[7:0]; end end wire [7:0] hex_tn1,hex_tn2,hex_tn3,hex_tn4; wire [7:0] hex_tn5,hex_tn6,hex_tn7,hex_tn8,hex_tn9; wire [8:0] hex_tn; assign hex_tn1 hex_inner-8'ha; //10 assign hex_tn2 hex_inner-8'h14;//20 assign hex_tn3 hex_inner-8'h1e;//30 assign hex_tn4 hex_inner-8'h28;//40 assign hex_tn5 hex_inner-8'h32;//50 assign hex_tn6 hex_inner-8'h3c;//60 assign hex_tn7 hex_inner-8'h46;//70 assign hex_tn8 hex_inner-8'h50;//80 assign hex_tn9 hex_inner-8'h5a;//90 assign hex_tn hex_tn9[7],hex_tn8[7],hex_tn7[7],hex_tn6[7], hex_tn5[7],hex_tn4[7],hex_tn3[7],hex_tn2[7], hex_tn1[7] ; always @ hex_tn begin if hex_tn[0] begin ten 4'b0000; num hex_inner; end else case 2'b10 hex_tn[8:7]: begin // 80 ten 4'b1000; num hex_tn8[3:0]; end hex_tn[7:6]:begin ten 4'b0111; num hex_tn7[3:0]; end hex_tn[6:5]:begin ten 4'b0110; num hex_tn6[3:0]; end hex_tn[5:4]:begin ten 4'b0101; num hex_tn5[3:0]; end hex_tn[4:3]:begin ten 4'b0100; num hex_tn4[3:0]; end hex_tn[3:2]:begin ten 4'b0011; num hex_tn3[3:0]; end hex_tn[2:1]:begin ten 4'b0010; num hex_tn2[3:0]; end hex_tn[1:0]:begin // 10 20 ten 4'b0001; num hex_tn1[3:0]; end default:begin ten 4'b1001; num hex_tn9[3:0]; end endcase end endmodule /////////////////////////////////////////////////////// ////////////// `timescale 1ns/100ps module mcu dbus_xio, abus, rbar_n, wbar_n, ale, cs_n, send_data_en ; parameter MCU_CLK 40;//25MHz parameter LL_DELAY 15; parameter b0 8'h01; parameter b1 8'h02; parameter b2 8'h03; parameter b3 8'h04; parameter b4 8'h05; parameter b5 8'h06; parameter b6 8'h07; parameter mcu_num 8'hff; parameter mini 8'h20; parameter hour 8'h10; parameter b0_addr 8'h0; parameter b1_addr 8'h1; parameter b2_addr 8'h2; parameter b3_addr 8'h3; parameter b4_addr 8'h4; parameter b5_addr 8'h5; parameter b6_addr 8'h6; parameter mcu_num_addr 8'h7; parameter mini_addr 8'h8; parameter hour_addr 8'h9; output wire[7:0] abus; output wire ale,rbar_n,wbar_n; output reg cs_n; output reg send_data_en; inout tri [7:0] dbus_xio; wr_rd Uwrd dbus_xio, abus, rbar_n, wbar_n, ale ; reg [7:0] b0r,b1r,b2r,b3r,b4r,b5r,b6r; reg [7:0] mcu_numr,minir,hourr; integer i; initial begin # MCU_CLK; # 3; cs_n 1'b0; send_data_en 1'b0; Uwrd.write_register b0_addr,b0 ; Uwrd.write_register b1_addr,b1 ; Uwrd.write_register b2_addr,b2 ; Uwrd.write_register b3_addr,b3 ; Uwrd.write_register b4_addr,b4 ; Uwrd.write_register b5_addr,b5 ; Uwrd.write_register b6_addr,b6 ; Uwrd.write_register mcu_num_addr,mcu_num ; Uwrd.write_register mini_addr,mini ; Uwrd.write_register hour_addr,hour ; Uwrd.read_register b0_addr,b0r ; Uwrd.read_register b1_addr,b1r ; Uwrd.read_register b2_addr,b2r ; Uwrd.read_register b3_addr,b3r ; Uwrd.read_register b4_addr,b4r ; Uwrd.read_register b5_addr,b5r ; Uwrd.read_register b6_addr,b6r ; Uwrd.read_register mcu_num_addr,mcu_numr ; Uwrd.read_register mini_addr,minir ; Uwrd.read_register hour_addr,hourr ; if b0 b0r $display "b0 wr_rd is right,b0 %h",b0 ; else $display "b0 wr_rd is wrong,should be %h,but now is %h",b0,b0r ; if b1 b1r $display "b1 wr_rd is right,b1 %h",b1 ; else $display "b1 wr_rd is wrong,should be %h,but now is %h",b1,b1r ; if b2 b2r $display "b2 wr_rd is right,b2 %h",b2 ; else $display "b2 wr_rd is wrong,should be %h,but now is %h",b2,b2r ; if b3 b3r $display "b3 wr_rd is right,b3 %h",b3 ; else $display "b3 wr_rd is wrong,should be %h,but now is %h",b3,b3r ; if b4 b4r $display "b4 wr_rd is right,b4 %h",b4 ; else $display "b4 wr_rd is wrong,should be %h,but now is %h",b4,b4r ; if b5 b5r $display "b5 wr_rd is right,b5 %h",b5 ; else $display "b5 wr_rd is wrong,should be %h,but now is %h",b5,b5r ; if b6 b6r $display "b6 wr_rd is right,b6 %h",b6 ; else $display "b6 wr_rd is wrong,should be %h,but now is %h",b6,b6r ; if mcu_num mcu_numr $display "mcu_num wr_rd is right,mcu_num %h",mcu_num ; else $display "mcu_num wr_rd is wrong,should be %h,but now is %h",mcu_num,mcu_numr ; if mini minir $display "mini wr_rd is right,mini %h",mini ; else $display "mini wr_rd is wrong,should be %h,but now is %h",mini,minir ; if hour hourr $display "hour wr_rd is right,hour %h",hour ; else $display "hour wr_rd is wrong,should be %h,but now is %h",hour,hourr ; cs_n 1'b1; send_data_en 1'b1; end endmodule /////////////////////////////////////////////////////// ////////////// module mul8b_shiftadd_fsm //output ports mul_out_en, mul_out, //input ports mul_ina, mul_inb, start, clk, rst_n ; parameter INPUT_WIDTH 8; parameter OUTPUT_WIDTH 16; parameter IDLE 4'b0000; parameter STAGE_ONE 4'b0001; parameter STAGE_TWO 4'b0010; parameter STAGE_THREE 4'b0011; parameter STAGE_FOUR 4'b0100; parameter STAGE_FIVE 4'b0101; parameter STAGE_SIX 4'b0110; parameter STAGE_SEVEN 4'b0111; parameter STAGE_EIGHT 4'b1000; output reg mul_out_en; output reg [OUTPUT_WIDTH-1:0] mul_out; input [INPUT_WIDTH-1:0] mul_ina,mul_inb; input clk,rst_
本文档为【《SOC 设计方法与实现》实验报告(可编辑)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_597436
暂无简介~
格式:doc
大小:74KB
软件:Word
页数:36
分类:
上传时间:2017-11-06
浏览量:33