搜索
bottom↓
回复: 2

魏坤请教你一个数字示波器触发功能实现的问题

[复制链接]

出0入0汤圆

发表于 2010-6-12 20:09:56 | 显示全部楼层 |阅读模式
我现在在尝试用verilog编写数字存储示波器。遇到一个问题。就是在写触发功能时,我加了一个trigger_begin的上升沿来判断trigger_en信号的有无。但是我存储了512个点后,无法将trigger_en复位。请问怎么解决这个问题。我的代码如下:
module DSO_Version2(clk,out_da2,out_da1,clk_da1,clk_da2,clk_ad,ad_in,out_switch);

input clk;
input [7:0] ad_in;

output [11:0] out_da2,out_da1;
output[7:0] out_switch;
output clk_da1,clk_da2,clk_ad;

reg clk_ad,clk_da1,clk_da2;   
reg[11:0] out_da2,out_da1;
reg[11:0] ad_counter;
reg[7:0] clk_counter;
reg[7:0] ad_temp;
reg[7:0] ad_data[511:0];
reg trigger_en,triggerjudge_en;
reg trigger_begin;
wire[7:0] out_switch;
reg[2:0] state,nstate;

parameter                        idle                  = 3'b000,
                        triggerjudge        = 3'b001,
                        AD_RAM                  = 3'b010,
                        dis                       = 3'b011;
       
always @(posedge clk_ad)       
        begin
                case(state)               
                idle:
                        begin
                                ADSample;
                                if(trigger_en)
                                        nstate <= AD_RAM;
                                                     triggerjudge_en <= 0;
                                else                                       
                                                     nstate <= triggerjudge;                                                   
                                        triggerjudge_en <= 1;
                        end
                triggerjudge:
                        begin       
                                trigger_judge(ad_temp);
                                nstate <= idle;       
                        end
                AD_RAM:
                        begin
                                write_RAM(ad_temp);
                                nstate <= dis;
                        end
                dis:
                        begin
                                display(ad_data[ad_counter]);
                                ad_counter <= ad_counter + 1;
                                if(ad_counter >= 511)
                                        begin
                                                ad_counter <= 0;
                                                triggerjudge_en <= 1;
                                                nstate <= idle;
                                        end
                                else
                                        begin
                                                nstate <= idle;
                                        end
                        end
                default:
                                nstate <= triggerjudge;
                               
                endcase
        state <= nstate;               
        end
       
       
task ADSample;
        if(clk_ad)
                ad_temp <= ad_in ^ 8'b1000_0000  ;
endtask
       
task trigger_judge;
        input[7:0] ad_temp;
        parameter trigger_level = 100;
        if(triggerjudge_en)
        begin
        if(ad_temp > trigger_level)
                trigger_begin <= 1;
        else
                trigger_begin <= 0;
        end

endtask

task write_RAM;
        input[7:0] ram_temp;
        if(trigger_en)
        ad_data[ad_counter] = ram_temp;
endtask

task display;
        input[7:0] data;
        if(trigger_en)
                begin
                        out_da2[11:4] <= data;
                        out_da1 <= out_da1 + 8;
                end
        else
                begin
                        out_da2 <= 0;
                        out_da1 <= 0;
                end
       
endtask

always @(posedge  trigger_begin)
        begin
            if(triggerjudge_en)
                begin
                if(trigger_begin)
                        trigger_en <= 1;
                else
                        trigger_en <= 0;
                end

        end
       

       
                       
               

       
assign out_switch = 8'b1000_1100;
       
endmodule

出0入0汤圆

发表于 2010-6-12 20:14:48 | 显示全部楼层
不懂帮顶

出0入0汤圆

发表于 2012-4-16 21:35:58 | 显示全部楼层
加个复位信号
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 00:36

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表