当前位置: 首页 > news >正文

ps做网站首页效果图上海谷歌推广

ps做网站首页效果图,上海谷歌推广,深圳设计官网,什么样的网页设计好一、前言 在上期文章中讲述了小助手的系统结构和原理。在PYNQ的框架开发中,我们一般可以将PL端当做PS端的一个外设,通过读写寄存器的方式来操作外设的功能,就类似于在开发ARM和DSP中操作外设一样,不同时的是,我们可以通…

一、前言

        在上期文章中讲述了小助手的系统结构和原理。在PYNQ的框架开发中,我们一般可以将PL端当做PS端的一个外设,通过读写寄存器的方式来操作外设的功能,就类似于在开发ARM和DSP中操作外设一样,不同时的是,我们可以通过FPGA定制我们自己需要的外设结构,例如本次文章需要提到的DDS外设。

二、外设功能介绍

        在开发外设之前首先要明确这个外设的功能:

        1、由于外部电流采用的是八路DA7512单通道DAC所以要实现DDS功能我们就需要再FPGA中搭建一个正弦波发生器,当然正弦波发生器有多种多样的实现方式,可以采用ROM查表的方式,也可以使用DSP实时计算。我这里就直接使用了Vivado提供的DDS IP核了(其本质也是通过ROM查表的方式),IP设置如下图1所示

图1 DDS设置

        2、DDS生成的正弦波需要可以控制其频率和初始相位功能;

        3、虽然有DDS功能但是也同样要兼容普通DA功能;

        4、一共八个通道,所以需要对八个通道的状态进行设置;

        综上,我们可以设计出DAC控制寄存器和DAC波形控制器如下图2和图3所示

图2 DAC控制寄存器
图3 DAC波形控制寄存器

三、外设搭建

        在ZYNQ中,搭建数据传输比较慢的外设时可以使用AXI_GP接口总线;AXI_GP接口总线可以视作为一种寄存器映射总线。最后将总线和逻辑功能封装成一个IP核,如下图4所示(这里就不放具体代码了,详细代码请移步到开源地址)

图4 DDS外设模块

        该模块具有一个AXI_GP接口的从机和七个DAC波形控制器数据,和一个DAC控制器数据,后续的DDS模块就利用这些寄存器数据来对DAC外设控制,DDS顶层代码如下:

//!DAC_DDS顶层,这里用来通过PS端写来的寄存器控制DAC的输出
module dac_dds_Top(input  sysClk,                  //系统时钟input  dacClk,                  //!DAC的时钟,最大为30Minput  sysRst,//DAC外设接口input  [31:0]Dac_Ch2_reg,       //!通道2数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch3_reg,       //!通道3数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch4_reg,       //!通道4数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch5_reg,       //!通道5数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch6_reg,       //!通道6数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch7_reg,       //!通道7数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ch8_reg,       //!通道8数据寄存器,详细参考寄存器手册input  [31:0]Dac_Ctrl_reg,      //!DAC控制寄存器,DAC模式:0=关闭DAC;1=普通DAC输出;2=正弦波输出//DAC7512引脚output [5:0]dac_Clk,            //!DAC的时钟output [5:0]dac_Din,            //!DAC数据引脚output [5:0]dac_Syn             //!DAC同步引脚
);localparam  DAC_CHx = 6;  //6个通道//系统时钟域的寄存器和网线
wire [31:0]Dac_chx_wire[0:DAC_CHx-1];               //!输入的寄存器线网数组
reg  DDS_Run_sysClk[0:DAC_CHx-1];                   //!DDS运行-系统时钟域
reg  [15:0]DDS_Fre_sysClk[0:DAC_CHx-1];             //!DDS的频率-系统时钟域
reg  [15:0]DDS_Phase_sysClk[0:DAC_CHx-1];           //!DDS相位-系统时钟域
reg  [15:0]DAC_OutData_sysClk[0:DAC_CHx-1];         //!普通模式下DAC的输出
reg  DAC_enable_sysClk[0:DAC_CHx-1];                //!DAC使能信号-系统时钟域
//DAC时钟域的寄存器和网线
wire DDS_Run_dacClk[0:DAC_CHx-1];                   //!DDS运行-DAC时钟域
wire [15:0]DDS_Fre_dacClk[0:DAC_CHx-1];             //!DDS的频率-DAC时钟域
wire [15:0]DDS_Phase_dacClk[0:DAC_CHx-1];           //!DDS相位-DAC时钟域
wire [15:0]DDS_Phase_out_dacClk[0:DAC_CHx-1];       //!驱动DDS的相位
wire [15:0]DDS2Dac_dacClk[0:DAC_CHx-1];             //!DDS->DAC
wire [15:0]DAC_OutData_dacClk[0:DAC_CHx-1];         //!普通模式下DAC的输出-DAC时钟域
reg  [15:0]DAC_Data[0:DAC_CHx-1];                   //!DAC模块的输入数据
wire DAC_enable_dacClk[0:DAC_CHx-1];                //!DAC使能信号-DAC时钟域
genvar i;//!输入寄存器线网整理 这里的数量与 DAC_CHx 有关
assign Dac_chx_wire[0][31:0] = Dac_Ch3_reg;
assign Dac_chx_wire[1][31:0] = Dac_Ch4_reg;
assign Dac_chx_wire[2][31:0] = Dac_Ch5_reg;
assign Dac_chx_wire[3][31:0] = Dac_Ch6_reg;
assign Dac_chx_wire[4][31:0] = Dac_Ch7_reg;
assign Dac_chx_wire[5][31:0] = Dac_Ch8_reg;//! DDS运行控制和DAC使能控制
generatefor(i=0;i<DAC_CHx;i=i+1)begin:AXI_REG_RUNalways @(posedge sysClk)beginif(sysRst)beginDDS_Run_sysClk[i] <= 1'd0;DAC_enable_sysClk[i] <= 1'd0;endelse beginDDS_Run_sysClk[i] <= Dac_Ctrl_reg[(i+2)*4+:4]==4'd2 ? 1'd1 : 1'd0;            //DDS使能信号DAC_enable_sysClk[i] <= Dac_Ctrl_reg[(i+2)*4+:4]==4'd0 ? 1'd0 : 1'd1;         //DAC使能信号endendend
endgenerate//! DDS频率、相位和普通DAC数据
generatefor(i=0;i<DAC_CHx;i=i+1)begin:AXI_REG_DATAalways @(posedge sysClk)beginif(sysRst)beginDDS_Fre_sysClk[i][15:0] <= 16'd0;DDS_Phase_sysClk[i][15:0] <= 16'd0;DAC_OutData_sysClk[i][15:0] <= 16'd0;endelse beginDDS_Fre_sysClk[i][15:0] <= Dac_chx_wire[i][31:16];      //频率数据DDS_Phase_sysClk[i][15:0] <= Dac_chx_wire[i][15:0];     //相位数据DAC_OutData_sysClk[i][15:0] <= Dac_chx_wire[i][15:0];   //普通DAC数据endendend
endgenerate//!时钟域数据转换--DDS运行信号
generatefor(i=0;i<DAC_CHx;i=i+1)begin:CLOCK_DDS_RUNshift # (.WIDTH(1),.SHIFT_MUN(3))shift_inst (.sysClk(dacClk),.sysRst(sysRst),.inData(DDS_Run_sysClk[i]),.outData(DDS_Run_dacClk[i]));end
endgenerate//!时钟域数据转换--DDS频率
generatefor(i=0;i<DAC_CHx;i=i+1)begin:CLOCK_DDS_FREshift # (.WIDTH(16),.SHIFT_MUN(3))shift_inst (.sysClk(dacClk),.sysRst(sysRst),.inData(DDS_Fre_sysClk[i][15:0]),.outData(DDS_Fre_dacClk[i][15:0]));end
endgenerate//!时钟域数据转换--DDS相位
generatefor(i=0;i<DAC_CHx;i=i+1)begin:CLOCK_DDS_PHASEshift # (.WIDTH(16),.SHIFT_MUN(3))shift_inst (.sysClk(dacClk),.sysRst(sysRst),.inData(DDS_Phase_sysClk[i][15:0]),.outData(DDS_Phase_dacClk[i][15:0]));end
endgenerate//!时钟域数据转换--普通模式下的DAC输出
generatefor(i=0;i<DAC_CHx;i=i+1)begin:CLOCK_OUTDATAshift # (.WIDTH(16),.SHIFT_MUN(3))shift_inst (.sysClk(dacClk),.sysRst(sysRst),.inData(DAC_OutData_sysClk[i][15:0]),.outData(DAC_OutData_dacClk[i][15:0]));end
endgenerate//!时钟域数据转换--DAC使能信号
generatefor(i=0;i<DAC_CHx;i=i+1)begin:CLOCK_DAC_ENABLEshift # (.WIDTH(1),.SHIFT_MUN(3))shift_inst (.sysClk(dacClk),.sysRst(sysRst),.inData(DAC_enable_sysClk[i]),.outData(DAC_enable_dacClk[i]));end
endgenerate//!DDS相位生成
generatefor(i=0;i<DAC_CHx;i=i+1)begin:DdsPhaseDDS_Phase # (.CH_NUM(DAC_CHx))DDS_Phase_u0 (.sysClk(dacClk),.sysRst(sysRst),.Run(DDS_Run_dacClk[i]),.Fre(DDS_Fre_dacClk[i][15:0]),.Phase(DDS_Phase_dacClk[i][15:0]),.DDS_Phase_Data(DDS_Phase_out_dacClk[i][15:0]));end
endgenerate//!DDS输出,该模块输出到DAC
generatefor(i=0;i<DAC_CHx;i=i+1)begin:DDSdds_compiler_0 dds_compiler_u0 (.aclk(dacClk),                                // input wire aclk.s_axis_phase_tvalid(1'd1),  // input wire s_axis_phase_tvalid.s_axis_phase_tdata(DDS_Phase_out_dacClk[i][15:0]),    // input wire [15 : 0] s_axis_phase_tdata.m_axis_data_tvalid(),    // output wire m_axis_data_tvalid.m_axis_data_tdata(DDS2Dac_dacClk[i][15:0])      // output wire [15 : 0] m_axis_data_tdata);end
endgenerate//!DAC数据控制
generatefor(i=0;i<DAC_CHx;i=i+1)begin:DAC_DATAalways @(posedge dacClk)beginif(sysRst)beginDAC_Data[i][15:0] <= 16'd0;end//关闭了DACelse if(DAC_enable_dacClk[i]==0)beginDAC_Data[i][15:0] <= 16'd0;end//DDS模式else if(DDS_Run_dacClk[i])beginDAC_Data[i][15:0] <= 16'h8000 - DDS2Dac_dacClk[i][15:0];end//普通模式else beginDAC_Data[i][15:0] <= DAC_OutData_dacClk[i][15:0];endendend
endgenerate//!DAC7512驱动
generatefor(i=0;i<DAC_CHx;i=i+1)begin:DACDAC7512  DAC7512_inst (.sysClk(dacClk),.sysRst(sysRst),.Data(DAC_Data[i][15:4]),.Start(DAC_enable_dacClk[i]),.Done(),.dac_Clk(dac_Clk[i]),.dac_Din(dac_Din[i]),.dac_Syn(dac_Syn[i]));end
endgenerate
endmodule

        在代码中,DAC使用了30M的时钟,AXI总线是100M时钟,所以控制数据在这里需要做跨时钟域处理,由于是快速时钟到慢速时钟,我们这里对数据进行打拍处理,并且做多周期约束即可,约束如下所示

#创建30M的DAC时钟时钟,主时钟对该时钟做多周期约束。 3个周期
create_clock -period 33.333 -name dacClk -waveform {0.000 16.667} [get_pins design_1_i/clk_wiz_0/clk_30M]
set_multicycle_path -setup -start -from [get_clocks *fpga*] -to [get_clocks *dacClk*] 3
set_multicycle_path -hold -start -from [get_clocks *fpga*] -to [get_clocks *dacClk*] 3

 四、结论

        在使用PYNQ框架开发ZYNQ时,PL端都可以视作PS端的外设。本文章只介绍了一种使用慢速数据的外设,如果你写的外设是一个需要高速数据传输的,例如视频解码等。就可以考虑使用AXI_HP接口配合PL端的DMA来实现。

        下一个一篇文章是讲述小助手项目的OLED显示是如何在PYNQ架构上实现的。


文章转载自:
http://antialcoholism.c7623.cn
http://dissonant.c7623.cn
http://cinecamera.c7623.cn
http://cyanate.c7623.cn
http://stript.c7623.cn
http://penna.c7623.cn
http://solifluxion.c7623.cn
http://format.c7623.cn
http://epipastic.c7623.cn
http://diffusion.c7623.cn
http://requisition.c7623.cn
http://contactee.c7623.cn
http://asocial.c7623.cn
http://noneconomic.c7623.cn
http://polythene.c7623.cn
http://cornish.c7623.cn
http://servingwoman.c7623.cn
http://progestational.c7623.cn
http://course.c7623.cn
http://woebegone.c7623.cn
http://ruthenic.c7623.cn
http://diving.c7623.cn
http://looky.c7623.cn
http://landsman.c7623.cn
http://honeymouthed.c7623.cn
http://tardive.c7623.cn
http://lockhole.c7623.cn
http://unweeting.c7623.cn
http://tagrag.c7623.cn
http://effendi.c7623.cn
http://harmlessly.c7623.cn
http://regnal.c7623.cn
http://plowstaff.c7623.cn
http://unstrung.c7623.cn
http://disconfirm.c7623.cn
http://cataphonics.c7623.cn
http://accentuation.c7623.cn
http://redeye.c7623.cn
http://incurment.c7623.cn
http://sirius.c7623.cn
http://sarka.c7623.cn
http://flagelliform.c7623.cn
http://paraldehyde.c7623.cn
http://flatways.c7623.cn
http://metonymical.c7623.cn
http://unconsidering.c7623.cn
http://cgt.c7623.cn
http://unlimited.c7623.cn
http://podsolise.c7623.cn
http://polyphyletic.c7623.cn
http://boxcar.c7623.cn
http://prolepsis.c7623.cn
http://kiruna.c7623.cn
http://illegal.c7623.cn
http://hydrographer.c7623.cn
http://tomboy.c7623.cn
http://branchiate.c7623.cn
http://breadbox.c7623.cn
http://carved.c7623.cn
http://precocious.c7623.cn
http://isolt.c7623.cn
http://sagacious.c7623.cn
http://obviously.c7623.cn
http://ratproofed.c7623.cn
http://wampus.c7623.cn
http://pedicle.c7623.cn
http://cerdar.c7623.cn
http://tigereye.c7623.cn
http://usage.c7623.cn
http://monomachy.c7623.cn
http://ferrum.c7623.cn
http://darkling.c7623.cn
http://interosculate.c7623.cn
http://cloudiness.c7623.cn
http://workwise.c7623.cn
http://clamjamfry.c7623.cn
http://depraved.c7623.cn
http://dissyllabic.c7623.cn
http://hexagonal.c7623.cn
http://doubtful.c7623.cn
http://egghead.c7623.cn
http://palmary.c7623.cn
http://vum.c7623.cn
http://toothache.c7623.cn
http://grandfatherly.c7623.cn
http://selsyn.c7623.cn
http://branny.c7623.cn
http://nimite.c7623.cn
http://begar.c7623.cn
http://illume.c7623.cn
http://prelaunch.c7623.cn
http://turkophil.c7623.cn
http://eager.c7623.cn
http://endoangiitis.c7623.cn
http://splutter.c7623.cn
http://corrupt.c7623.cn
http://cotoneaster.c7623.cn
http://genouillere.c7623.cn
http://belled.c7623.cn
http://viscometer.c7623.cn
http://www.zhongyajixie.com/news/79433.html

相关文章:

  • 纪念册设计制作网站seo应用
  • 网店装修素材网站域名免费查询
  • 武汉网站建设公司服务营销的七个要素
  • 做国际网站有用2023年10月疫情恢复
  • 宠物店做网站的论文廊坊首页霸屏排名优化
  • php做网站需要学的东西百度网盘客户端
  • 武汉门户网网络优化工程师主要做什么
  • 做动画网站公司seo关键词是什么意思
  • 个人备案购物网站网络软文发布
  • 如何在网站上做关键词上海网站排名推广
  • 好习惯网站seo网站排名优化案例
  • 电子商务网站的数据库怎么做怎么做网站教程
  • 音乐网站的建设百度推广客户端下载安装
  • 不懂英文怎么做英文的seo网站百度客服电话4001056
  • 广州黄埔做网站seo提升排名技巧
  • 本溪建设银行网站seo优化内页排名
  • 旅游网站建设规划书百度关键词推广价格查询
  • 网络工程师网课seo代码优化步骤
  • 淘宝客网站名全网引流推广
  • 狗爹服务器做视频网站百度一下首页官网百度
  • 网站编辑面试问题和答案东莞企业网站推广
  • 情女照片做杯子网站百度推广创意范例
  • 武汉专业做网站团队网络媒体推广报价
  • 传奇手游网站竞价推广账户竞价托管收费
  • 导购网站一站式建站建设网站制作公司
  • 免费网站推广手机百度免费下载
  • -1网站建设安卓优化大师历史版本
  • 江阴安泰物流有限公司网站谁做的google关键词优化
  • 日本做的视频网站有哪些问题合肥网络推广软件系统
  • wordpress酷播搜索引擎优化的具体操作