精华内容
下载资源
问答
  • Verilog代码设计入门-输入信号IN进行上跳沿捕获的电路 软件:Quartus9.1 代码如下: ———————————————————————————————— // module top, 边沿捕获器代码, module top( CLK , // ...

    Verilog代码设计入门-输入信号IN进行上跳沿捕获的电路

    软件:Quartus9.1

    代码如下:
    ————————————————————————————————
    // module top, 边沿捕获器代码,
    module top(
    CLK , // input clock
    IN , // input
    OUT ); // output
    input CLK; input IN; output OUT;
    reg d1R, d2R; // 电路中的D触发器输出端
    reg OUT; // 组合逻辑输出信号,作为输出端口
    // 生成移位寄存的D触发器,我们要明确,下面代码的写法会生成d1R和d2R两个D触发器。
    // 并且d1R和d2R级联构成IN信号的移位寄存器。这是EDA工具不会篡改的事实。
    always @ (posedge CLK) begin
    d1R <= IN ;
    d2R <= d1R ;
    end
    // 判断上跳沿的组合逻辑,我们要明确,下面的代码是一个以d1R、d2R信号作为输入,
    // 以OUT信号作为输出的组合逻辑,并且代码中指出了OUT信号与d1R、d2R信号的逻辑
    // 关系(好比是真值表),但是究竟用怎样的逻辑门实现(好比是卡诺图的画圈)
    // 那是EDA工具要关心的事情。
    always @ (d1R or d2R) begin
    if((d2R == 0)&&(d1R == 1)) // 新值为1,旧值为0,跳变发生
    OUT = 1’b1;
    else
    OUT = 1’b0;
    end
    endmodule
    // endmodule top
    ——————————————————————————————
    观察生成的电路图
    对于Quartus
    Tools -> Netlist Viewer -> RTL Viewer

    在这里插入图片描述

    可观察到生成有两个D触发器

    展开全文
  • 检测一个信号的下降沿时,当start_i产生一个下降沿时,start_clk会产生一个脉冲。 wire start_clk; reg start_clk_delay; assign start_clk = ((!start_i)&&start_clk_delay); always@(posedge clk) ...

    检测一个信号的下降沿时,当start_i产生一个下降沿时,flag会产生一个脉冲。

    wire flag;
    reg start_delay;
    assign flag = ((!start_i)&&start_delay);	
    always@(posedge clk)
    	start_delay <= start_i;
    

    检测上升沿

    wire flag;
    reg start_delay;
    assign flag = (start_i&&(!start_delay));	
    always@(posedge clk)
    	start_delay <= start_i;
    
    展开全文
  • 一般情况进行信号的捕获,如上升沿或者下降沿。均可采用外部触发进行捕获。这是基于信号比较稳定的情况,如信号出现较大的纹波或者易受到干扰。会出现“误触”的现象,此时用外部中断难以捕获到正确的信号。  ...

          一般情况下进行信号的捕获,如上升沿或者下降沿。均可采用外部触发进行捕获。这是基于信号比较稳定的情况,如信号出现较大的纹波或者易受到干扰。会出现“误触”的现象,此时用外部中断难以捕获到正确的信号。

           这种情况的解决办法,可以采用以下办法:

    (1)使用定时器进行捕获,并开启定时器的滤波功能。在库函数结构体中,为:

            TIM_ICInitStruct.TIM_ICFilter = 0x0f;(滤波系数可填0x00~0x0f)

            当系数开到最大(0x0f)可有效过滤大部分纹波以及干扰信号,但对于持续时间较长的干扰无法过滤。

    (2)使用ADC模拟看门狗功能。

            比如当前信号为高电平,触发信号为下降沿,存在着一定的纹波以及偶发的干扰如图:

            

            这种信号,采用第一种方法并不能很好地捕获。但如果使用ADC模拟看门狗功能则能很好地识别。方法如下:

       (1)初始化看门狗触发阈值为低电平触发。假设触发信号的电平为0.2V,干扰信号最低达到0.6V。设置看门狗阈值为:0.4V~3.3V(STM32F1供电3.3V),此时0.4V~3.3V的信号不会触发看门狗中断,但0.2V(触发信号)可成功触发中断。达到了过滤干扰信号的目的。

       (2)当触发信号触发模拟看门狗中断后,处理完触发信号的程序后,更改看门狗触发阈值为高电平状态。如0V~2V。目的是防止触发信号时间过长,频繁进入看门狗中断。当触发信号恢复高电平状态,因为已经设置了看门狗中断为高电平触发,此时会进入一次中断。中断中只需要将看门狗触发阈值改为低电平触发,即可等待下一次的触发信号。

     

    具体实现代码如下:

    void  ADC2_AWGZcpInit(void)
    {
    	GPIO_InitTypeDef GPIO_InitStruct;
    	ADC_InitTypeDef  ADC_InitStruct;
    	NVIC_InitTypeDef  NVIC_InitStruct;
    
    	/*********************初始化ADC GPIO********************/
    	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    	
    	 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
    	 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    	
    	 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    	 GPIO_Init(GPIOB,&GPIO_InitStruct);
    	
    	/**********************ADC2 NVIC************************/
    	 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
    	
    	 NVIC_InitStruct.NVIC_IRQChannel = ADC1_2_IRQn;
    	 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    	 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    	 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
    
    	 NVIC_Init(&NVIC_InitStruct);
    
    	/************************初始化ADC2************************/
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE);
    	
    	RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //72M/6 = 12M
    	
    	ADC_InitStruct.ADC_ContinuousConvMode = ENABLE;
    	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
    	ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
    	ADC_InitStruct.ADC_NbrOfChannel = 1;
    	ADC_InitStruct.ADC_ScanConvMode = ENABLE;
    	
    	ADC_Init(ADC2,&ADC_InitStruct);
    	
    	ADC_RegularChannelConfig(ADC2, ADC_Channel_8, 1, ADC_SampleTime_7Cycles5);
    	
    	/***************************ADC看门狗设置****************************/
            ADC_AnalogWatchdogThresholdsConfig(ADC2,ADC2_AEG[2],ADC2_AEG[3]);
    	
            ADC_AnalogWatchdogSingleChannelConfig(ADC2, ADC_Channel_8);
    	
    	ADC_AnalogWatchdogCmd(ADC2,ADC_AnalogWatchdog_SingleRegEnable);
    	
    	/***************************ADC校准****************************/
    	ADC_Cmd(ADC2, ENABLE);
    
            ADC_ResetCalibration(ADC2);
    	while(ADC_GetResetCalibrationStatus(ADC2)&&(timeout--));
    	
    	ADC_StartCalibration(ADC2);
    	while(ADC_GetCalibrationStatus(ADC2)&&(timeout--));	
    
    	ADC_ITConfig(ADC2,ADC_IT_AWD, ENABLE);
    	
    	ADC_SoftwareStartConvCmd(ADC2, ENABLE);
    }
    
    u16 ADC2_AEG[5]={4095,250,3850,0,1};  //模拟看门狗阈值数组,第0、1元素为监测低电平触发信号阈值,2、3为高阈值  
    void ADC1_2_IRQHandler(void)
    {
    	  ADC2_AEG[4] = !ADC2_AEG[4]*2;
    	
    	  ADC2->HTR = ADC2_AEG[0+ADC2_AEG[4]];  //更改ADC看门狗阈值
              ADC2->LTR = ADC2_AEG[1+ADC2_AEG[4]];
    	
    	  if(ADC2_AEG[4]<1)  //下降沿触发输出
             {
    	    //code	
    	 }
    	  ADC2->SR &= 0xfffe;  //清除标志位	
    }

     

     

     

     

     

    展开全文
  • 双边沿触发器

    千次阅读 2019-05-30 18:22:03
    双边沿触发器在时钟的每个上升沿和下降沿都会触发。但是在FPGA中没有双边沿触发器,并且像always @(posedge clk or negedge clk)这样的描述方式并不合法。 建立如下一个类似双边沿触发器的的电路: Hint: 在...

    双边沿触发器在时钟的每个上升沿和下降沿都会触发。但是在FPGA中没有双边沿触发器,并且像always @(posedge clk or negedge clk)这样的描述方式并不合法。

    建立如下一个类似双边沿触发器的的电路:

    Hint:

    • 在FPGA中不能创造双边沿触发器,但是我们可以把上升沿触发器和下降沿触发器都创造出来。
    • 这个题是一个中等难度的电路设计题,但是只需要基础的Verilog语言知识。(这是一个电路设计题,而不是一个编码题。)在编码前手画一个电路草图可能会有帮助。

    https://hdlbits.01xz.net/wiki/Dualedge


    想要对时钟进行双边沿触发主要有三种方法。

    一种就是像楼上所说,使用电平敏感触发,能够实现时钟的双边沿触发,但是一般不推荐这种方法触发,这种方法虽然在逻辑上是可行的,但verilog终归不是C一样的高级语言,它的每段代码都需经过综合布线实现的,因此在用verilog实现算法的时候还需考虑代码书写风格的合理性,而对时钟信号使用电平触发,很有可能在某些情况下就不能满足时序。

    第二种就是就是将上升沿和下降沿分成两个always快来写,这样子写的缺点就是不能在两个always块中对同一个reg变量做操作,同时这样写总觉得会很蛋疼。

    第三种就是利用pll将时钟信号延迟或者滞后180°,分别对上升沿触发,或者干脆将时钟倍频,这样子就不需要考虑太多了。

    另外,对于频率不是很快的时钟信号或者是一些异步信号建议采用脉冲形式同步,也就是在一个足够快的时钟下(如50M),可以实时监测输入信号的电平,当两次相邻电平异或之后为1,就表示有上升沿或者下降沿(01表示有上升沿,10表示有下降沿),这样子的好处就是,你的所有模块都可以在同一个工作时钟下工作,而不会因为一些其他时钟信号或异步信号而将电路变成异步电路。

    (以上有些是参考网上资料,有些是我实际操作的经验,还望采纳)http://www.openedv.com/posts/list/55917.htm

     使用电平敏感触发方式和将时钟信号翻转或滞后180°,这两种方式都可以正确的实现电路功能,但是编译后会出现不满足时序的要求,可能是因为编译器将这两种方式都认为是组合逻辑电路。

    如上图所示,没有产生always过程块在时钟周期结束后才进行赋值的一个周期延时。因此我们把目光放在写两个always过程块这种方法上,一个上升沿触发,一个下降沿触发。

    笔者分别手画出了d在上升沿和下降沿产生的q1q2两个信号,在仔细观察后发现这两个信号和原信号d没有任何关系(其实是因为这里第一步就进入了错误思路)。通过观察手画的信号图,发现可以在时钟为正电平时将q1信号赋值给q,在时钟为负电平时,将q2赋值给q,这样就解决了如何将q1q2变为q的问题,也就是将一个信号通过时钟上升沿和下降沿分解后再还原成为原本的信号。跳过了双边沿触发,也满足了时序。

    module top_module (
        input clk,
        input d,
        output q
    );
        reg q1,q2;
        always@(posedge clk)
            q1 <= d;
        always@(negedge clk)
            q2 <= d ;
        
        always@(clk)
            if(clk)
                q <= q1;
       	else 
                q <= q2;
    
    endmodule

     上面的第三个always块也可以用组合逻辑来描述:assign q = clk ? q1:q2;

    上面的主要思路是使用别的方法跳过双边沿触发器这个模块,也就是将d信号包装成两个不同的信号,再将这两个信号还原成d信号。这种思想其实可以用一个很简单的的电路来表达。那就是异或“^”。

    module top_module(
    	input clk,
    	input d,
    	output q);
    	
    	reg p, n;
    	
    	// A positive-edge triggered flip-flop
        always @(posedge clk)
            p <= d ^ n;
            
        // A negative-edge triggered flip-flop
        always @(negedge clk)
            n <= d ^ p;
        
        // Why does this work? 
        // After posedge clk, p changes to d^n. Thus q = (p^n) = (d^n^n) = d.
        // After negedge clk, n changes to d^p. Thus q = (p^n) = (p^d^p) = d.
        // At each (positive or negative) clock edge, p and n FFs alternately
        // load a value that will cancel out the other and cause the new value of d to remain.
        assign q = p ^ n;
        
        
    	// Can't synthesis this.
    	/*always @(posedge clk, negedge clk) begin
    		q <= d;
    	end*/
        
        
    endmodule
    

    正如上述代码所示,直接用异或的特性,d^n^n=d。把p和n当做中间量载体,改变了d信号但又很容易就可以还原,甚至p和n的初始值都没有设定,因为实际上都没有用到p和n的值。

    展开全文
  • Verilog判断信号上升沿、下降沿

    千次阅读 2021-02-24 09:48:05
    被检测信号变与时钟可能会因为竞争或其他因素影响导致会滞后时钟上升沿几纳秒; 如果对判断电平有固定延时或其他苛刻条件的话,仅仅依靠时钟上升沿来判断可能会导致至少一个时钟的误差。 根据上面描述的这些...
  • 理论,在衰落条件,在符号错误率(SER)上下文中比较了单和2通信系统,并通过仿真进行了验证。 最后,我们评估了在瑞利和中米衰落条件两个天线单元的自适应波束形成器的阈值增益的数值。
  • 一、序言 使用单片机开发开发过程控制中,经常会用到定时,变量上升沿动作,下降沿动作,在业余做了个单独工具处理模块 二、C代码组成如下 共有.h文件和.c文件组成。 2.1 F00200_utils.h代码构成 #ifndef __F...
  • 我们都知道上升沿脉冲指令是从低电平到高电平时动作,那么当跳转指令条件不满足时会执行满足条件时被过的程序段,(执行被过的程序)当程序瞬间执行时里面有上升沿脉冲指令时程序该如何响应? 下面我用GX-WORKS...
  • 做一个微信的外挂

    千次阅读 2018-01-01 15:24:05
    淘宝好多卖代练的,其实做一个很简单,不需要有安卓开发知识,不需要有图像识别知识,不需要有人工智能知识!重要的事情说三遍,都不需要。 简单说一下思路: 1.用adb连手机截图,命令是: adb shell ...
  • 最近,微信小游戏可以说是火遍了全国,从小孩子到大孩子仿佛每一个人都在刷,作为无(zhi)所(hui)不(ban)能(zhuan)的 AI 程序员,我们在想,能不能用人工智能(AI)和计算机视觉(CV)的方法来玩...
  • 最近,微信小游戏可以说是火遍了全国,从小孩子到大孩子仿佛每一个人都在刷,作为无(zhi)所(hui)不(ban)能(zhuan)的 AI 程序员,我们在想,能不能用人工智能(AI)和计算机视觉(CV)的方法来...
  • (点击上方蓝字,快速关注我们)来源:肖泰洪 + 安捷 zhuanlan.zhihu.com/p/32636329最近,微信小游戏可以说是火遍了全国,从小孩子到大孩子仿佛每一个人都在...于是,我们开发了微信Auto-Jump算法,重新定
  • 为了解决超长推进距离综采工作面采用双巷掘进存在回采率低、二次采动巷道维护困难等问题,以及采用沿空掘巷技术为避免孤岛工作面需在采区或煤层间采无法满足集中生产要求且易造成压煤等问题,提出了超长推进距离工作...
  • 在SKT型跳汰机原有技术基础,通过采取改变入料方式,在给煤机加装变频器,改进跳汰机排料道结构,沿跳汰机宽度方向并排安装两套浮标装置,采用新型智能控制系统等一系列有效措施,研制了SKT-35大型跳汰机,并成功应用...
  • 平煤股份十一矿主采的己组煤层为高瓦斯突出煤层,目前已进入深部开采的己二采区情况...通过对小煤柱和无煤柱沿空掘巷巷道的矿压分析,提出采空区无煤柱掘巷布置方式,并成功实施,实现了回采巷道快速、安全、高效掘进。
  • 取一个信号的上升沿或下降沿信号,可以通过将信号delay后,然后将原信号和delay信号,通过不同的与非操作,获取上升沿信号或下降沿信号: 阶段一: reg delay; // delay信号 always @ ( posedge clk or negedge ...
  • 汰洗煤及汰机操作

    千次阅读 2021-03-01 15:05:44
    汰机洗煤是中小型洗煤厂的主要洗煤工艺,它对洗出精煤的指标有决定性的影响。现就对汰机的操作和洗煤的基本知识总结如下。 一、汰机的入料性质应均质化 为了保证汰选矿效果的稳定和质量不断提高,汰机...
  • 4、reg1中保存的是老状态0,reg0中保存的是新状态1,当检测到相邻的两个D触发器中的数据不同时,说明有沿,所以上升沿就是 ~reg1 & reg0 = 1; 5、因为是采用的相邻的两个D触发器中的数据检测变化,所以4中产生...
  • 在捕获上升沿的时候栽个小跟头,搞了好一会,才发现问题。。。。。 捕获上升沿的时候,切记要初始化位1,仔细想一下你就会明白。。(捕获下降沿时则初始化为0)   捕获上升沿: input signal; output P_signal;...
  • 心跳传感器

    千次阅读 2015-01-21 18:22:35
    刚开始我是想用定时器捕获一个上升沿一个下降沿来计算它的周期,为的是实时数据输出的更快点,后来发现这样不合理,因为此方波不是对称的。如是改成了抓取两个上升沿为一个周期。这里有一个问题,就是
  • 方波上升沿下降沿毛刺问题

    千次阅读 2017-06-06 19:26:35
    不客气的说,去除这个尖尖的刺,无论是你用什么办法,效果都和你预期的有相当大的差距;甚至付出极大的代价,而收益却不好意思说;第一:这个尖尖的东西到底是什么? 第二:它产生的原因到底是什么?...
  • [ - 中虎] 10月2日 My mama always said: "Life is like a box of chocolates. You never know what youre gonna get." ——电影
  • 问:关于上升沿和下降沿触发的...现在我把我多年来一直采用的办法奉,但愿对初学者有所帮助。 以一个最简单的计数器为例: Port( clock:in std_logic; pulse:in std_logic; q:out std_logic_vector(3 downto 0...
  • 这个设计,我准备分成两个部分,一个部分负责检测心跳传感器,然后计算心率,通过无线NRF24...我这里程序的检测思路就是,测量这个上升沿。通过计算相隔的时间计算出心率。程序的话可以看下面的程序链接。 https://...
  • 如何检测 51单片机IO口的下降沿

    千次阅读 2016-04-16 15:15:01
    下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿。 从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有...
  • 以一个计数器为例:   1 ---------------------...当遇到要对某个信号的沿处理时,建议采用上述小例子中 en 信号的处理办法。   转载于:https://www.cnblogs.com/ifys/archive/2010/11/02/edge.html
  • 从消除时钟信号冗余变而致的无效功耗的要求出发,提出双边沿移位寄存器的设计思想.该移位寄存器的功能已用PSPICE程序模拟验证.使用该移位寄存器设计双边沿移位计数器的实例被演示.对模拟所得数据的计算结果表明...
  • 该方案利用反馈保持避免电路因输入信号瞬间毛刺引起的错误翻转,利用时钟信号双边沿跳变敏感抑制冗余跳变,利用时钟低摆幅降低三值触发器功耗。该电路与三值单边沿触发器相比,在保持相同数据吞吐量的条件,可使时钟...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,821
精华内容 9,928
关键字:

上跳沿下跳沿