## 基于小脚丫FPGA的口袋仪器 ### 1 主要功能及特性 * 一路[[DDS]]任意波形发生器 * 12位R-2R [[DAC]] * [[DAC]]转换率为200Msps,输出最高5MHz模拟信号 * 频率调节精度1Hz * 输出幅度5Vpp * 输出直流偏移调节范围+/-2.5V * 2路可调电压输出 * 调节范围为0 ~ +/-4V * 双路ADC数据采集 * 8位[[ADC]] * 采样率45Msps * 输入模拟信号范围20Vpp * 波形和信息显示 * 240*240分辨率[[LCD]] {{drawio>pocketinstru:stepinstrument}} ### 2 相关设计文档 * {{:stepinstrument.pdf|Step口袋仪器板原理图 - PDF格式}} * BOM文件 * KiCad设计文件 - ZIP格式 * Gerber文件 - ZIP格式 ### 3 核心器件技术资料及数据手册 * MAX1193-双路45Msps、8位高速[[ADC]] * SGM8301轨到轨高速运算放大器 * SGM8601高速运算放大器 * TS3A5017模拟开关 * LMV358 双路运算放大器 * TL974 4路轨到轨运算放大器 * CH340 [[USB]]转[[UART]]变换器 * LM2776电荷泵变换器 * MIC5504-3.3 [[LDO]] * 1.54寸、分辨率为240*240的RGB[[LCD]]模块 ### 4 参考代码 * [[dds_verilog|DDS任意波形发生器/可调直流电压发生器]] * [[scope_verilog|与示波器相关的FPGA Verilog逻辑设计]] * [[ADCSampling|ADC采样]] * [[LCD240*240Disp|240*240分辨率RGB LCD的控制]] 数据ADC读出、LCD写入的状态控制 // -------------------------------------------------------------------- // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // -------------------------------------------------------------------- // Module: Arbiter // // Author: Step // // Description: Control sample and display in different time // // Web: www.stepfpga.com // // -------------------------------------------------------------------- // Code Revision History : // -------------------------------------------------------------------- // Version: |Mod. Date: |Changes Made: // V1.1 |2016/10/30 |Initial ver // -------------------------------------------------------------------- module Arbiter ( input clk_in, // system clock input rst_n_in, //system reset, active low input sample_done, input display_done, output reg sample_en, output reg display_en ); localparam IDLE = 2'd0; localparam SAMPLE = 2'd1; localparam DISPLAY = 2'd2; reg [1:0] state; always@(posedge clk_in or negedge rst_n_in) begin if(!rst_n_in) begin state <= IDLE; sample_en <= 1'b0; display_en <= 1'b0; end else begin case(state) IDLE:begin sample_en <= 1'b0; display_en <= 1'b0; state <= SAMPLE; end SAMPLE:begin if(sample_done) begin sample_en <= 1'b0; display_en <= 1'b1; state <= DISPLAY; end else begin sample_en <= 1'b1; display_en <= 1'b0; end end DISPLAY:begin if(display_done) begin sample_en <= 1'b1; display_en <= 1'b0; state <= SAMPLE; end else begin sample_en <= 1'b0; display_en <= 1'b1; end end default:state <= IDLE; endcase end end endmodule