zoukankan      html  css  js  c++  java
  • 实验8 #第8章 Verilog有限状态机设计-3 #Verilog #Quartus #modelsim

    3. 状态机A/D采样控制电路

    3.1 目标:用状态机控制ADC0809实现数据采集。

    3.2 ADC0809简介

          (1)ADC0809是8位A/D转换器,片内有8路模拟开关,可控制8个 模拟量中 的1个进入转换器中。完成一次转换的时间约100us。含锁存控制的8个

                   多路开关,输出有三态缓冲器控制,单5V供电。ADC0809的外部引脚,工作时序图详见其数据手册。start是转换启动信号,高电平有效。ale是

                   地址锁存信号。eoc是转换状态信号,约100us,上跳沿表示转换结束。oe是输出使能。

           (2)ADC0809更详细的说明可参阅数据手册和数字电路基础里的模数转换部分,比如,康华光版数电书里有讲解逐次逼近的转换原理,用天平称重

                   选砝码的过程来类比对分法,高位为1,先跟1/2的vref比较,然后再更加或减一半的一半比较,循环下去,8位就比较8次,得到一组8位的数字编码

                   对应当前输入的模拟量的最接近的值。也用到了极限的思想。这样,模拟量的输入就转换成数字量的输出了。

    3.3  这个实验要实现的就是用Verilog HDL来设计一个状态机控制逻辑,控制ADC0809的时序,完成一个数据采集的功能。

           (1)设计思想:研究ADC的功能描述和引脚说明,时序图,把时序分成几个状态;然后把adc的输入信号和输出信号颠倒,作为控制逻辑的输入和输出。

           (2)ADC0809采样控制电路的Verilog 代码:

     1 // adc0809 control circuit
     2 //2020-11-3 
     3 // by YongFengXie
     4 module adc0809(
     5                 input clk,   
     6                 input [7:0] d,   //adc0809 output 
     7                 input clr,
     8                 input eoc,
     9                 output reg ale,
    10                 output reg start,
    11                 output reg oe,
    12                 output adda,   // LSB of the 3 input signal chanel
    13                 output lock0,      // data lock signal
    14                 output [7:0] q);   // output data
    15 reg lock;
    16 parameter s0='d0,s1='d1,s2='d2,s3='d3,s4='d4;
    17 reg [2:0] current_state,next_state;
    18 reg [7:0] rel;
    19 
    20 assign adda = 0;
    21 assign lock0=lock;
    22 assign q=rel;
    23 
    24 always @(posedge clk or posedge clr)
    25 begin
    26   if(clr)
    27     current_state <= s0;
    28   else
    29     current_state <= next_state;
    30 end
    31 
    32 always @(posedge lock)
    33 begin
    34   rel <= d;
    35 end
    36 
    37 always @(current_state,eoc)
    38 begin
    39   case(current_state)
    40     s0:begin
    41          ale<=1'b0;
    42          start<=1'b0;
    43          lock<=1'b0;
    44          oe<=1'b0;
    45          next_state<=s1;
    46        end
    47     s1:begin
    48          ale<=1'b1;
    49          start<=1'b1;
    50          lock<=1'b0;
    51          oe<=1'b0;
    52          next_state<=s2;
    53        end
    54     s2:begin
    55          ale<=1'b0;
    56          start<=1'b0;
    57          lock<=1'b0;
    58          oe<=1'b0;
    59          if(eoc)
    60            next_state<=s3;
    61          else
    62            next_state<=s2;
    63        end
    64     s3:begin
    65          ale<=1'b0;
    66          start<=1'b0;
    67          lock<=1'b0;
    68          oe<=1'b1;
    69          next_state<=s4;
    70        end
    71     s4:begin
    72          ale<=1'b0;
    73          start<=1'b0;
    74          lock<=1'b1;
    75          oe<=1'b1;
    76          next_state<=s0;
    77        end
    78     default:next_state<=s0;
    79   endcase
    80 end
    81 
    82 endmodule
    83 
    84  

    adc0809测试代码:

     1 // adc0809 control circuit testbench
     2 //2020-11-3 
     3 // by YongFengXie
     4 `timescale 1us/1us
     5 module adc0809_tb;
     6 
     7                 reg clk;   
     8                 reg [7:0] d;   //adc0809 output 
     9                 reg clr;
    10                 reg eoc;
    11                 wire ale;
    12                 wire start;
    13                 wire  oe;
    14                 wire adda;   // LSB of the 3 input signal chanel
    15                 wire lock0;      // data lock signal
    16                 wire [7:0] q; 
    17 
    18 adc0809 ub(clk,d,clr,eoc,ale,start,oe,adda,lock0,q);
    19 
    20 initial begin
    21           clk=1'b0;
    22           clr=1'b1;
    23           d=8'b1011_1010;
    24           eoc=1'b1;
    25           #20 clr=1'b0;
    26           #100 eoc=1'b0;
    27           #150 eoc=1'b1;
    28           #10 d=8'b0001_0010;
    29           #500 $stop;
    30         end
    31 
    32 always #5 clk=~clk;
    33 
    34 endmodule 

    仿真结果:

  • 相关阅读:
    [SUCTF 2019]EasySQL 1【BUUCFT】【SQL注入】
    [HCTF 2018]WarmUp 1【BUUCFT】【代码审计】
    [强网杯 2019]随便注 1 【BUUCFT】【SQL注入】
    网站如何做好防护
    【单片机】换行、回车
    【Win32】VC6 Visual C/C++ 6.0 修改程序图标
    【Win32】通过多线程自动关闭对话框的方法
    微服务demo
    Mac安装redis
    python---rsa加密根据指数和模生成加密参数模板
  • 原文地址:https://www.cnblogs.com/halflife/p/13920139.html
Copyright © 2011-2022 走看看