关于音频总线IIS的学习---Verilog

主要思想: 在分析寄存器的值变化的时候,将时钟的边沿分两边来看,边沿之前,边沿之后,在always 块语句里面用来分析判断的寄存器的值,都应该用边沿变化之前的值,边沿之后, always块做操作的寄存器的值才发生变化。

记住,一定是寄存器量(reg定义的),像audio_sck 这种外部输入的异步信号要判断上升沿状态下的即时值。

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:  chensimin
//
// Create Date: 2018/06/08 13:33:40
// Design Name:
// Module Name: iis_s2p
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

module iis_s2p(

    input    wire        reset,
    input    wire        clk,    // 12.288
    input    wire        audio_sck,
    input    wire        audio_ws

    );

//-----------------------------------------------
//将外部输入的sck,ws 信号通过时钟clk进行同步采集进来
    reg audio_sck_d = 0;
    reg audio_ws_d = 0;
    always @(posedge clk or posedge reset)
    begin
        if(reset)
        begin
            audio_sck_d <= 1‘b0;
            audio_ws_d <= 1‘b0;
        end

        else
        begin
            audio_sck_d <= audio_sck;
            audio_ws_d <= audio_ws;
        end
    end

//-----------------------------------------------
//监测audio_sck 信号的下降沿
//疑问:为什么不采用组合逻辑的方式
//assign sck_neg  =   audio_sck_d &   ~audio_sck ;
    reg sck_neg = 0;
    always @(posedge clk or posedge reset)
    begin
        if(reset)
            sck_neg <= 1‘b0;

        else if (audio_sck_d & audio_sck)
            sck_neg <= 1‘b1;

        else
            sck_neg <= 1‘b0;
    end

endmodule

/*

add_force {/iis_s2p/clk} -radix hex {1 0ns} {0 5000ps} -repeat_every 10000ps
add_force {/iis_s2p/audio_sck} -radix hex {1 0ns} {0 20000ps} -repeat_every 40000ps
add_force {/iis_s2p/reset} -radix hex {1 0ns} {0 20ns}

*/

仿真结果:

分析:

1.从仿真结果可以看出为什么不能用通常的assign语句来检测sck的下降沿信号,因为sck_neg为外部输入信号,通过时钟采集存入sck_d寄存器中,两个信号波形完全一样,根本就不会有sck_neg置高的时候。

2.信号过了主时钟,存入寄存器,寄存器值的变化分析方法:

以主时钟的上升沿为边界,分为 :上升沿到来之前, 上升沿,上升沿之后,数据是在上升沿之后进行更新。

对于如下模块:

//-----------------------------------------------//结合波形图来看,clk上升沿到来之前,寄存器中audio_sck_d的数据为0,clk上升沿时,将audio_sck_d里面的数据进行更新,clk上升沿之后,audio_sck_d里面的数据发生变化
//将外部输入的sck,ws 信号通过时钟clk进行同步采集进来
    reg audio_sck_d = 0;
    reg audio_ws_d = 0;
    always @(posedge clk or posedge reset)
    begin
        if(reset)
        begin
            audio_sck_d <= 1‘b0;
            audio_ws_d <= 1‘b0;
        end

        else
        begin
            audio_sck_d <= audio_sck;
            audio_ws_d <= audio_ws;
        end
    end

对于如下模块的分析:

//-----------------------------------------------//主时钟clk上升沿到来之前,sck_neg,audio_sck_d,audio_sck 均为0 上身沿到来的时候,audio_sck_d, audio_sck信号的值进行更新,从0-1,此时并不满足if(audio_sck_d & audio_sck)的要求//因此,第一个主时钟clk上升沿之后,sck_neg的值依旧保持为0, 下一个主时钟clk上升沿到来之前,audio_sck_d, audio_sck,的值为1,满足if(audio_sck_d & audio_sck)的要求,因此,在第二个clk上升沿之后,sck_neg的//的值变为1.
//监测audio_sck 信号的下降沿
//疑问:为什么不采用组合逻辑的方式
//assign sck_neg  =   audio_sck_d &   ~audio_sck ;
    reg sck_neg = 0;
    always @(posedge clk or posedge reset)
    begin
        if(reset)
            sck_neg <= 1‘b0;

        else if (audio_sck_d & audio_sck)
            sck_neg <= 1‘b1;

        else
            sck_neg <= 1‘b0;
    end

原文地址:https://www.cnblogs.com/chensimin1990/p/9155610.html

时间: 2024-08-04 01:55:07

关于音频总线IIS的学习---Verilog的相关文章

I2S音频总线学习

IIS音频总线学习(一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频率分类: 图2 声音的频率(语音信号频率范围:300Hz-3kHz) 声音的传播携带了信息,它是人类传播信息的一种主要媒体. 声音的三种类型: 波形声音:包含了所有声音形式 语音:不仅是波形声音,而且还有丰富的语言内涵(抽象→提取特征→意义理解) 音乐:与语音相比,形式更规范.音乐是符号化的声音.

蓝牙音频模块IIS数传BLE模块I2S音频总结说明

一.简介 I2S音频的接口包含MCLK.BCK.LRCK.SDATA 1.BT401模块音频输出,既支持DAC立体声输出,同时也支持I2S输出.只能二选一. 2.但是请注意,虽然BT401模块是一样,但是I2S输出版本的固件和DAC输出的固件是不同的 3.I2S的输出,支持主或者从.但是目前我们开发的固件,只支持BT401作为主机使用 二.问题 1.1测试环境硬件说明[BT401测试DEMO板 + PCM5102A] 左图是对应的测试 环境   ..  右图是BT401所使用到IO口的定义 演示

红外解码编码学习----verilog

在设计中运用红外遥控器可以很好的解决按键缺少的问题,还可以方便的控制产品. 红外发射部分: 红外发射管: 判断红外发射管的好坏 : 电路原理图: 接收部分: 传输的NEC协议: 本实验电路: verilog 程序: 发送程序: /********************************Copyright************************************** **----------------------------File information---------

v3学院带你学习——Verilog基本语法精讲

? ? ? ? ? ? ? ? ? ? ? ?

FPGA培训专家 V3学院 FPGA专家 带你学习Verilog语言top_down书写技巧

此文章为原创出自 V3学院 www.v3edu.org,FPGA培训专家 为了提高我们代码的复用率,我们可以将不同的功能的代码分模块书写,然后在顶层连线即可.我们举一个简单的例子,如下程序,我们实现的是LED流水. 我们在led模块中先将系统时钟分频为1HZ的时钟,然后用分频后的时钟控制LED灯的流水,但我的分频和LED灯流水完全不是相同的工程,只是把分频后的时钟作为LED灯的控制时钟.这样我们会发现如果我再次用到流水灯的模块的话需要修改很多地方,那么为了让我们的模块复用率更高.更容易复用,我们

Verilog学习心得(一)

?         作为一个萌新,第一次让我学习Verilog我是拒绝的,连数电都没有学习过学Verilog真是一种折磨...不过自己选择的路不管怎么样都要走下去. 硬件描述语言HDL(Hardware Description Language)是一种用文本形式描述数字电路和设计数字逻辑系统的语言.而Verilog HDL作为一种IEEE标准化的语言,正是我所学的对象. Verilog和C的风格很类似,反正比VHDL容易多了2333. 表1 C语言与Verilog相对应的关键字与控制结构表 C

windows server 2003下配置IIS服务器

Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务.最初是Windows NT版本的可选包,随后内置在Windows 2000.Windows XP Professional和Windows Server 2003一起发行,但在Windows XP Home版本上并没有IIS. 1.IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议.目前很

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

[IIS]IIS扫盲(一)

iis - IIS概念相关 1.IIS(Inter-IC Sound bus)又称I2S,是菲利浦公司提出的串行数字音频总线协议.目前很多音频芯片和MCU都提供了对IIS的支持.IIS总线只处理声音数据.其他信号(如控制信号)必须单独传输.为了使芯片的引出管脚尽可能少,IIS只使用了三根串行总线.这三根线分别是:提供分时复用功能的数据线.字段选择线(声道选择).时钟信号线.  2.IIS是Internet Information Services的缩写,是一个World Wide Web ser