新手小白自己写的一个小代码,实际测试完毕,第一次写有什么写的不好的地方大神们多多关照,功能如题。

/*reg:synthesis noptune*/
/*wire:synthesis keep*/module AD_module(//输入端input  [7:0]   AD_data_in,         //输入AD转换完成数据进行处理input CLK_50M,                      //主时钟输入input    CLK_1M,                     //AD0809主频input RET,                            //复位信号输入input   EOC,                            //转换结束信号标志位,当转换结束时为高,开始转换时为低input data_sync,                  //数据标志位,沟通串口和AD的数据同步//输出端output  [7:0]   AD_data_out,        //输出处理完的数据  output  OE,                         //AD输出使能端output read_clk,                   //AD转换时钟output  STR                         //AD转换启动信号输出端//output   ALE                         //AD地址锁存允许信号输出端);////--内部参数定义parameter set_time_200ns = 4'd10;    //定义ST端口最小延时200nsparameter set_time_400ns = 5'd20;    //定义ST端口周期延时400nsreg    [1:0]   detect_edge;                //定义延边检测寄存器,记录EOC端的电平变化情况wire    [1:0]   detect_edge_n;              //定义延边检测寄存器的下一个状态reg    [4:0]   time_cnt_st;                //定义时间寄存器,记录-st端高电平-定时时间reg  [4:0]   time_cnt_st_n;              //定义时间寄存器的下一个状态 wire [15:0]data_temp;                   //定义数据缓存器,缓存正在处理的数据  reg [4:0]   OE_time_cnt;                //定义OE计数器,记录OE电平拉高时间reg  [4:0]   OE_time_cnt_n;              //定义OE计数器的下一个状态reg  [7:0]   AD_data_temp;               //定义模数转换数据缓存器,缓存数据以便于发送reg   [7:0]   AD_data_temp_n;         //定义模数转换数据缓存器的下一个状态reg          ad_clk;                     //定义AD时钟线,寄存AD需要的时钟reg           ad_clk_n;                   //定义AD时钟线的下一个状态reg          OE_signal_temp;         //输出使能信号缓存器,缓存输出使能信号reg          OE_signal_temp_n;           //输出使能信号缓存器的下一个状态reg            time_cnt_st_em;         //时间计数使能,标志计数的使能和停止reg           time_cnt_st_em_n;           //时间计数使能的下一个状态reg           st_signal_temp;         //start conversion signal tempreg           st_signal_temp_n;           //start conversion signal temp next state//
//--AD0809主频输出assign read_clk = CLK_1M;//
//--处理转换完成的数据
//assign    data_temp = {data_temp[15:8] , AD_data_in};//将处理完成的数据写在缓存器中
//
//--寄存器AD_data_temp赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET)AD_data_temp <= 8'h0;elseAD_data_temp <= AD_data_temp_n;
end
//寄存器AD_data_temp计数
always @ (*)
beginif(OE_signal_temp == 1'b1)          //当OEAD_data_temp_n = AD_data_in/*data_temp[7:0]*/;elseAD_data_temp_n = AD_data_temp;
end
//
//--模数转换数据输出
assign AD_data_out = AD_data_temp;
//
//--寄存器OE_time_cnt赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET)OE_time_cnt <= 5'h0;elseOE_time_cnt <= OE_time_cnt_n;
end
//寄存器OE_time_cnt计数
always @ (*)
beginif(OE_time_cnt == set_time_200ns || detect_edge == 2'b01)//当EOC上升沿时清零并开始计数OE_time_cnt_n = 5'h0;elseOE_time_cnt_n = OE_time_cnt + 1'b1;
end
//
//--寄存器time_cnt_st赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET)time_cnt_st <= 5'h0;elsetime_cnt_st <= time_cnt_st_n;
end
// 寄存器time_cnt_st计数
always @ (*)
begin//当到达定时时间或者EOC端口和ST端口都为低电平时,清零if(time_cnt_st == set_time_400ns || EOC == 1'b0)time_cnt_st_n = 5'h0;elsetime_cnt_st_n = time_cnt_st + 1'b1;
end//
//--寄存器st_signal_temp赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET)st_signal_temp <= 1'b0;elsest_signal_temp <= st_signal_temp_n;
end
//寄存器st_signal_temp计数
always @ (*)
beginif(time_cnt_st < set_time_200ns)        //当转换开始计数器达到数值时,信号取反st_signal_temp_n = 1'b0;else if(time_cnt_st >= set_time_200ns && time_cnt_st < set_time_400ns)st_signal_temp_n = 1'b1;else                                                //其他情况保持st_signal_temp_n = st_signal_temp;
end
//
//--输出STR信号
assign STR = st_signal_temp;
//
//-- 寄存器detect_edge赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET)detect_edge <= 2'b11;elsedetect_edge <= detect_edge_n;
end
// 寄存器detect_edge计数
assign detect_edge_n = {detect_edge[0],EOC};   //detect_edge == 2'b01为上升沿
//
//--寄存器OE_signal_temp赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET) OE_signal_temp <= 1'b0;elseOE_signal_temp <= OE_signal_temp_n;
end
//寄存器OE_signal_temp计数
always @ (*)
beginif(detect_edge == 2'b01)    //当EOC产生上升沿时,OE输出高电平OE_signal_temp_n = 1'b1;else if(OE_time_cnt == set_time_200ns)//当电位时间达到时,拉低电平OE_signal_temp_n = 1'b0;else                               //其他状态输出低电平OE_signal_temp_n = OE_signal_temp;
end
//
//--OE信号输出
assign OE = OE_signal_temp;//
//--寄存器time_cnt_st_em赋值
always @ (posedge CLK_50M or negedge RET)
beginif(!RET) time_cnt_st_em <= 1'b0;elsetime_cnt_st_em <= time_cnt_st_em_n;
end
//寄存器time_cnt_st_em计数
always @ (*)
beginif(detect_edge == 2'b01)                        //EOC为上升延时开始计时time_cnt_st_em_n = 1'b1;else if(time_cnt_st == set_time_200ns)        //当时间计满时,使能停止等待AD下一次数据处理完毕time_cnt_st_em_n = 1'b0;else                                                 //其他情况保持time_cnt_st_em_n = time_cnt_st_em;
endendmodule 

基于Verilog语言的AD0809驱动相关推荐

  1. 基于Verilog语言的13进制计数器设计

    基于Verilog语言的13进制计数器设计 `timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2019/11/10 ...

  2. verilog 自动售货机状态机实现_基于Verilog语言的简单自动售货机-数电课设报告(最终版)最新版...

    <基于Verilog语言的简单自动售货机-数电课设报告.docx>由会员分享,可免费在线阅读全文,更多与<基于Verilog语言的简单自动售货机-数电课设报告(最终版)>相关文 ...

  3. 基于Verilog语言的伪随机码的编写

    写之初,笔者并没有太大的自信,因为笔者对伪随机码并没有太多的认识.但老师有命,笔者不得不进行编写,同时笔者也特别希望能有个项目来锻炼自己. 笔者在开始编写的时候,首先上网查了很多的资料,对伪随机码算是 ...

  4. 基于Verilog语言的2ASK信号调制(FPGA)

    *使用Quartus编译器,参考杜勇老师<数字调制解调技术的MATLAB与FPGA实现  Altera Verilog版>书(我已上传至我的资源) 利用DDS内部IP核的2ASK信号调制: ...

  5. 【iCore2双核心板】SRAM 读写实验(基于Verilog语言)

    _____________________________________ 深入交流QQ群: A: 204255896(1000人超级群,可加入) B: 165201798(500人超级群,满员)  ...

  6. 基于Verilog使用Quartus设计数字秒表和数字时钟

    目录 一.数字秒表 1.1 新建工程 1.2 添加 Verilog 文件 1.3 添加 VWF 文件 1.4 波形仿真 二.多功能数字钟 三.总结 本文内容:使用 Quartus 基于 Verilog ...

  7. 数字逻辑设计大程——以撒的结合(Verilog语言)

    前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏.原型是我们两人都非常喜爱的一款游戏-- ...

  8. 基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制, 坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM 都是通过Verilog 语言来实现的

    基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制, 坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM. . . 都是通过Verilog 语言来实现的,具有很高的研 ...

  9. 基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制 都是通过Verilog 语言来实现的

    基于FPGA的永磁同步伺服控制系统的设计,在FPGA实现了伺服电机的矢量控制, 坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM. . . 都是通过Verilog 语言来实现的,具有很高的研 ...

最新文章

  1. 解决报错:Can't read private key和./build-aux/cksum-schema-check: Permission denied
  2. 【Python-ML】神经网络-深度学习库Keras
  3. php网站通过什么联网,PHP通过Ajax调用连接百度效果实现检测网站是否联网的功能...
  4. 桌面快速启动软件AltRun----赶快使得你的桌面变整洁吧
  5. spark.mllib源码阅读:GradientBoostedTrees
  6. 构建负载均衡服务器之一 负载均衡与集群详解
  7. delphi php 加密解密_如何恢复被MaMoCrypt勒索软件加密的数据
  8. 服务器运维查看大日志文件,Linux 运维必备的 40 个命令总结,收好了~
  9. Android MediaCodec实现多段音视频的截取与拼接
  10. JVM学习笔记四_垃圾收集器与内存分配策略
  11. 关于工业大数据,这是最完整的介绍了,附60页PPT
  12. 关于Google Chrome浏览器离线安装包下载方法
  13. Gitlab+猪齿鱼 实现自动化部署
  14. Android 利用重力感应调整手机模式
  15. wordpress文章页面添加字体增大减小链接
  16. 编曲宿主DAW是什么 2023年编曲宿主软件哪个好用
  17. 老板拖欠工资怎么办?
  18. 如何在PowerPoint演示文稿中链接或嵌入Excel工作表
  19. el-upload编辑时回显图片
  20. 给定3个数字,求出这3个数字中的最大数,并输出最大数

热门文章

  1. TUTK[MediaSDK][iOS]没有声音或声音异常
  2. 数字化与高质量发展之百年大变局下的科技创新--学习王坚院士讲座的记录和读后感
  3. 微型计算机期末考试题库,微机原理-期末考试题库及答案(含3套试卷)
  4. 阿里云云计算机专业考试(Alibaba Cloud Certified Professional,ACP)简介介绍
  5. SaaS服务:虽霸主未成,但不乏强者
  6. 好用的可视化数据建模工具
  7. CSDN日报191105:2019年11月全国程序员工资统计,区块链工程师比算法工资高
  8. 51开发板上为什么会有多个晶振
  9. behaviac 学习
  10. 《人机交互技术》第一章 绪论 知识点整理