关于音频总线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 = ;
reg audio_ws_d = ;
always @(posedge clk or posedge reset)
begin
if(reset)
begin
audio_sck_d <= 'b0;
audio_ws_d <= '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 = ;
always @(posedge clk or posedge reset)
begin
if(reset)
sck_neg <= 'b0; else if (audio_sck_d & audio_sck)
sck_neg <= 'b1; else
sck_neg <= '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 = ;
reg audio_ws_d = ;
always @(posedge clk or posedge reset)
begin
if(reset)
begin
audio_sck_d <= 'b0;
audio_ws_d <= '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 = ;
always @(posedge clk or posedge reset)
begin
if(reset)
sck_neg <= 'b0; else if (audio_sck_d & audio_sck)
sck_neg <= 'b1; else
sck_neg <= 'b0;
end

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

  1. I2S音频总线学习

    IIS音频总线学习(一)数字音频技术 一.声音的基本概念 声音是通过一定介质传播的连续的波. 图1 声波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数 声音按频 ...

  2. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...

  3. I2S音频总线学习(二)I2S总线协议

    http://blog.csdn.net/ce123_zhouwei/article/details/6919954

  4. 【接口时序】6、IIC总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE .ChipScope 硬件平台: 1. FPG ...

  5. 【接口时序】4、SPI总线的原理与Verilog实现

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1. FPGA型号:Xilinx公 ...

  6. SPI总线的原理与Verilog实现

    转载地址:https://www.cnblogs.com/liujinggang/p/9609739.html 一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件 ...

  7. 基于I2C总线的MPU6050学习笔记

    MPU6050学习笔记 1. 简述 一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU60 ...

  8. iis深入学习资源

    iis站点:https://www.iis.net/overview/reliability/richdiagnostictools 感兴趣可以深入学习下iis

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

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

随机推荐

  1. day037 mysql之单表查询

    一.单表查询语法 select distinct 字段1,字段2,... from 库名.表名 where 条件 group by 字段 having 筛选条件 order by 字段 limit 限 ...

  2. pandas数据结构之Dataframe

    Dataframe DataFrame是一个[表格型]的数据结构,可以看做是[由Series组成的字典](多个series共用同一个索引).DataFrame由按一定顺序排列的多列数据组成.设计初衷是 ...

  3. 线程池threadPools

    1.线程池是用来存储线程的容器 2.Executors.newFixedThreadPool(int n);创建线程池,并且设置线程池的容量为n 3.submit开启线程 4.会返回一个对象futur ...

  4. scrapy python2升级python3遇到的坑

    换成Python3首先pycharm先执行: 然后看代码自己所需要的第三方库都要重新装 然后执行代码: 遇到这样的错如下: SyntaxError: invalid syntax 先检查print 所 ...

  5. learning gcc args

    参数详解无选项编译链接    将test.c预处理.汇编.编译并链接形成可执行文件.这里未指定输出文件,默认输出为a.out.    例子用法:    gcc test.c 无选项链接    gcc ...

  6. 跟随我在oracle学习php(7)

    盒子模型布局 盒子模型:每个标签都是一个盒子 计算宽高:box-sizing:border-box盒子的宽度就是设置的宽度,里面的内容自适应 从里到外:padding(内边距) Border(边框) ...

  7. 【阅读笔记】《C程序员 从校园到职场》第六章 配置文件,makefile 文件 (Part 2)

     Contents: 1.配置文件(通常以 ini 结尾) 2.makefile文件 (Linux) PS: 这篇文章的内容,不太理解. 一.配置文件 本文以一个实际的小软件为例,介绍了C语言中配置文 ...

  8. Beta 冲刺 (2/7)

    Beta 冲刺 (2/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 为utils_wxpy.py添加注释 ...

  9. [Leetcode 134]汽车加油站 Gas Station (环形)

    [题目] There are N gas stations along a circular route, where the amount of gas at station i is gas[i] ...

  10. 《JavaScript Dom 编程艺术》读书笔记-第7章

    动态创建标记~内容包括: 1. 传统技术:document.write 和innerHTML 2. 深入剖析DOM方法:createElemen.createTextNode.appendChild和 ...