精华内容
下载资源
问答
  • lc振荡电路工作原理

    2020-07-14 03:12:14
    本文主要介绍的是lc振荡电路的工作原理,感兴趣的童鞋们快来学习一下吧~~很涨姿势的哦~~1.lc振荡电路工作原理--简介LC振荡电路,是指用电感L、电容C组成选频网络的振荡电路,用于产生高频正弦波信号,常见的LC正弦波...
  • 电机总述 电机(俗称“马达”)是指依据电磁感应定律实现电能转换或传递一种电磁装置。它主要作用是产生驱动转矩,...定子绕组:是电动机的电路部分,通入三相交流电,产生旋转磁场;机座:固定定子铁心与前后端盖以支
  • 原理分析 电机要实现正反转控制,将其电源相序中任意两相对调即可(我们称为换相),通常是V相不变,将U相与W...我们先来看一下正反转的电路图,把电路图从中间划开,左边是主线路,右边是控制线路。 主线路原理
  • 原文链接: ... 从大学时代第一次接触FPGA至今已有10多年时间,...当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来。后来读研究生,工作陆陆续续也用过Quartus II...

    原文链接:

    http://m.elecfans.com/article/575270.html

    从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。

    在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。

    当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。

    我们先谈一下FPGA基本知识:

    1.硬件设计基本原则

    FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

    速度与面积平衡和互换原则:

    • 一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约;

      反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进行处理,在芯片输出模块处再对数据进行“并串转换”。从而实现了用面积复制换取速度的提高。

    • 硬件原则:理解HDL本质。

    • 系统原则:整体把握。

    • 同步设计原则:设计时序稳定的基本原则。

    2.Verilog作为一种HDL语言,对系统行为的建模方式是分层次的

    比较重要的层次有系统级、算法级、寄存器传输级、逻辑级、门级、电路开关级。

    3.实际工作中,除了描述仿真测试激励时使用for循环语句外,极少在RTL级编码中使用for循环

    这是因为for循环会被综合器展开为所有变量情况的执行语句,每个变量独立占用寄存器资源,不能有效的复用硬件逻辑资源,造成巨大的浪费。一般常用case语句代替。

    4. if…else…和case在嵌套描述时是有很大区别的

    if…else…是有优先级的,一般来说,第一个if的优先级最高,最后一个else的优先级最低。而case语句是平行语句,它是没有优先级的,而建立优先级结构需要耗费大量的逻辑资源,所以能用case的地方就不要用if…else…语句。

    补充:1.也可以用if…; if…; if…;描述不带优先级的“平行”语句。

    5.FPGA一般触发器资源比较丰富,而CPLD组合逻辑资源更丰富

    6.FPGA和CPLD的组成

    FPGA基本有可编程I/O单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等6部分组成。

    CPLD的结构相对比较简单,主要由可编程I/O单元、基本逻辑单元、布线池和其他辅助功能模块组成。

    7.Block RAM

    3种块RAM结构,M512 RAM(512bit)、M4K RAM(4Kbit)、M-RAM(64Kbit)。

    • M512 RAM:适合做一些小的Buffer、FIFO、DPRAM、SPRAM、ROM等;

    • M4K RAM: 适用于一般的需求;

    • M-RAM: 适合做大块数据的缓冲区。

    Xlinx 和 LatTIce FPGA的LUT可以灵活配置成小的RAM、ROM、FIFO等存储结构,这种技术被称为分布式RAM。

    补充:但是在一般的设计中,不提倡用FPGA/CPLD的片内资源配置成大量的存储器,这是处于成本的考虑。所以尽量采用外接存储器。

    8.善用芯片内部的PLL或DLL资源完成时钟的分频、倍频率、移相等操作

    不仅简化了设计,并且能有效地提高系统的精度和工作稳定性。

    9.异步电路和同步时序电路的区别

    异步电路:

    • 电路核心逻辑有用组合电路实现;

    • 异步时序电路的最大缺点是容易产生毛刺;

    • 不利于器件移植;

    • 不利于静态时序分析(STA)、验证设计时序性能。

    同步时序电路:

    • 电路核心逻辑是用各种触发器实现;

    • 电路主要信号、输出信号等都是在某个时钟沿驱动触发器产生的;

    • 同步时序电路可以很好的避免毛刺;

    • 利于器件移植;

    • 利于静态时序分析(STA)、验证设计时序性能。

    10.同步设计中,稳定可靠的数据采样必须遵从以下两个基本原则:

    (1)在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器的Setup时间之久,这条原则简称满足Setup时间原则;

    (2)在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器的Hold时钟之久,这条原则简称满足Hold时间原则。

    11.同步时序设计注意事项

    • 异步时钟域的数据转换。

    • 组合逻辑电路的设计方法。

    • 同步时序电路的时钟设计。

    同步时序电路的延迟。同步时序电路的延迟最常用的设计方法是用分频或者倍频的时钟或者同步计数器完成所需的延迟,对比较大的和特殊定时要求的延时,一般用高速时钟产生一个计数器,根据计数产生延迟;对于比较小的延迟,可以用D触发器打一下,这样不仅可以使信号延时了一个时钟周期,而且完成了信号与时钟的初次同步。在输入信号采样和增加时序约束余量中使用。

    另外,还有用行为级方法描述延迟,如“#5 a《=4’0101;”这种常用于仿真测试激励,但是在电路综合时会被忽略,并不能起到延迟作用。

    Verilog 定义的reg型,不一定综合成寄存器。在Verilog代码中最常用的两种数据类型是wire和reg型,一般来说,wire型指定的数据和网线通过组合逻辑实现,而reg型指定的数据不一定就是用寄存器实现。

    12.常用设计思想与技巧

    (1)乒乓操作;

    (2)串并转换;

    (3)流水线操作;

    (4)异步时钟域数据同步。是指如何在两个时钟不同步的数据域之间可靠地进行数据交换的问题。数据时钟域不同步主要有两种情况:

    ①两个域的时钟频率相同,但是相差不固定,或者相差固定但是不可测,简称为同频异相问题。

    ②两个时钟频率根本不同,简称异频问题。

    两种不推荐的异步时钟域操作方法:一种是通过增加Buffer或者其他门延时来调整采样;另一种是盲目使用时钟正负沿调整数据采样。

    13.模块划分基本原则

    (1)对每个同步时序设计的子模块的输出使用寄存器(用寄存器分割同步时序模块原则)。

    (2)将相关逻辑和可以复用的逻辑划分在同一模块内(呼应系统原则)。

    (3)将不同优化目标的逻辑分开。

    (4)将送约束的逻辑归到同一模块。

    (5)将存储逻辑独立划分成模块。

    (6)合适的模块规模。

    (7)顶层模块最好不进行逻辑设计。

    14.组合逻辑的注意事项

    (1)避免组合逻辑反馈环路(容易毛刺、振荡、时序违规等)。

    解决:A.牢记任何反馈回路必须包含寄存器;B.检查综合、实现报告的warning信息,发现反馈回路(combinaTIonal loops)后进行相应修改。

    (2)替换延迟链。

    解决:用倍频、分频或者同步计数器完成。

    (3)替换异步脉冲产生单元(毛刺生成器)。

    解决:用同步时序设计脉冲电路。

    (4)慎用锁存器。

    解决方式:

    A、使用完备的if…else语句;

    B、检查设计中是否含有组合逻辑反馈环路;

    C、对每个输入条件,设计输出操作,对case语句设置default 操作。特别是在状态机设计中,最好有一个default的状态转移,而且每个状态最好也有一个default的操作。

    D、如果使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句。

    小技巧:仔细检查综合器的综合报告,目前大多数的综合器对所综合出的latch都会报“warning”,通过综合报告可以较为方便地找出无意中生成的latch。

    15.时钟设计的注意事项

    同步时序电路推荐的时钟设计方法:时钟经全局时钟输入引脚输入,通过FPGA内部专用的PLL或DLL进行分频/倍频、移相等调整与运算,然后经FPGA内部全局时钟布线资源驱动到达芯片内所有寄存器和其他模块的时钟输入端。

    FPGA设计者的5项基本功:仿真、综合、时序分析、调试、验证。

    对于FPGA设计者来说,练好这5项基本功,与用好相应的EDA工具是同一过程,对应关系如下:

    1. 仿真:Modelsim, Quartus II(Simulator Tool)

    2. 综合:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)

    3. 时序:Quartus II (TImeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)

    4. 调试:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)

    5. 验证:Modelsim, Quartus II(Test Bench Template Writer)

    掌握HDL语言虽然不是FPGA设计的全部,但是HDL语言对FPGA设计的影响贯穿于整个FPGA设计流程中,与FPGA设计的5项基本功是相辅相成的。

    对于FPGA设计者来说,用好“HDL语言的可综合子集”可以完成FPGA设计50%的工作——设计编码。

    练好仿真、综合、时序分析这3项基本功,对于学习“HDL语言的可综合子集”有如下帮助:

    • 通过仿真,可以观察HDL语言在FPGA中的逻辑行为。

    • 通过综合,可以观察HDL语言在FPGA中的物理实现形式。

    • 通过时序分析,可以分析HDL语言在FPGA中的物理实现特性。

    对于FPGA设计者来说,用好“HDL语言的验证子集”,可以完成FPGA设计另外50%的工作——调试验证。

    1. 搭建验证环境,通过仿真的手段可以检验FPGA设计的正确性。

    2. 全面的仿真验证可以减少FPGA硬件调试的工作量。

    3. 把硬件调试与仿真验证方法结合起来,用调试解决仿真未验证的问题,用仿真保证已经解决的问题不在调试中再现,可以建立一个回归验证流程,有助于FPGA设计项目的维护。

    FPGA 设计者的这5项基本功不是孤立的,必须结合使用,才能完成一个完整的FPGA设计流程。反过来说,通过完成一个完整的设计流程,才能最有效地练习这5项基本功。对这5项基本功有了初步认识,就可以逐个深入学习一些,然后把学到的知识再次用于完整的设计流程。如此反复,就可以逐步提高设计水平。采用这样的循序渐进、螺旋式上升的方法,只要通过培训入了门,就可以自学自练,自我提高。

    市面上出售的有关FPGA设计的书籍为了保证结构的完整性,对 FPGA设计的每一个方面分开介绍,每一方面虽然深入,但是由于缺少其他相关方面的支持,读者很难付诸实践,只有通读完全书才能对FPGA设计获得一个整体的认识。这样的书籍,作为工程培训指导书不行,可以作为某一个方面进阶的参考书。

    对于新入职的员工来说,他们往往对FPGA的整体设计流程有了初步认识,5项基本功的某几个方面可能很扎实。但是由于某个或某几个方面能力的欠缺,限制了他们独自完成整个设计流程的能力。入职培训的目的就是帮助他们掌握整体设计流程,培养自我获取信息的能力,通过几个设计流程来回的训练,形成自我促进、自我发展的良性循环。在这一过程中,随着对工作涉及的知识的广度和深度的认识逐步清晰,新员工的自信心也会逐步增强,对个人的发展方向也会逐步明确,才能积极主动地参与到工程项目中来。

    最后总结几点:

    1)看代码,建模型

    只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。

    2)用数学思维来简化设计逻辑

    学习FPGA不仅逻辑思维很重要,好的数学思维也能让你的设计化繁为简,所以啊,那些看见高数就头疼的童鞋需要重视一下这门课哦。举个简单的例子,比如有两个32bit的数据X[31:0]与Y[31:0]相乘。当然,无论Altera还是Xilinx都有现成的乘法器IP核可以调用,这也是最简单的方法,但是两个32bit的乘法器将耗费大量的资源。那么有没有节省资源,又不太复杂的方式来实现呢?我们可以稍做修改:

    将X[31:0]拆成两部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],则X1左移16位后与X2相加可以得到X;同样将Y[31:0]拆成两部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],则Y1左移16位后与Y2相加可以得到Y;则X与Y的相乘可以转化为X1和X2 分别与Y1和Y2相乘,这样一个32bit*32bit的乘法运算转换成了四个16bit*16bit的乘法运算和三个32bit的加法运算。转换后的占用资源将会减少很多,有兴趣的童鞋,不妨综合一下看看,看看两者差多少。

    3)时钟与触发器的关系

    “时钟是时序电路的控制者” 这句话太经典了,可以说是FPGA设计的圣言。FPGA的设计主要是以时序电路为主,因为组合逻辑电路再怎么复杂也变不出太多花样,理解起来也不没太多困难。但是时序电路就不同了,它的所有动作都是在时钟一拍一拍的节奏下转变触发,可以说时钟就是整个电路的控制者,控制不好,电路功能就会混乱。

    打个比方,时钟就相当于人体的心脏,它每一次的跳动就是触发一个 CLK,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常工作少不了组织细胞的构成,那么触发器就可以比作基本单元组织细胞。时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机”,没有它时序逻辑电路就不能正常工作,因为时序逻辑电路主要是利用触发器存储电路的状态,而触发器状态变换需要时钟的上升或下降沿!由此可见时钟在时序电路中的核心作用!

    最后简单说一下体会吧,归结起来就多实践、多思考、多问。实践出真知,看 100遍别人的方案不如自己去实践一下。实践的动力一方面来自兴趣,一方面来自压力,我个人觉得后者更重要。有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。

    在实践的过程中要多思考,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,如果有写项目日志的习惯更好,把问题及原因、解决的办法都写进去。最后还要多问,遇到问题思索后还得不到解决就要问了,毕竟个人的力量是有限的,问同学同事、问搜索引擎、问网友都可以,一篇文章、朋友们的点拨都可能帮助自己快速解决问题。

    展开全文
  • 理解三相异步电动机点动控制电路工作原理;在生产实践中,大部分生产设备动力来源于电动机。电动机控制电路由各种电气元件按一定要求连接而成,有比较简单,有相当复杂,但任何复杂控制电路都是由一些基本...

    今天我们一起学习三相异步电动机点动控制电路。

    共有三个任务:

    学会电路原理图的识读;

    掌握三相异步电动机点动控制电路组成;

    理解三相异步电动机点动控制电路工作原理;

    在生产实践中,大部分生产设备的动力来源于电动机。电动机控制电路由各种电气元件按一定要求连接而成,有的比较简单,有的相当复杂,但任何复杂的控制电路都是由一些基本控制线路有机地组合起来,实现对某种设备的电气自动化控制。

    学习基本控制电路,首先要学会电路原理图的识读。

    我们以三相异步电动机点动控制电路为例来识读电路原理图。

    电路图用规定的电气图形符号来表示电路连接情况,这些图形符号和文字符号采用国家统一规定的标准,具有结构简单、层次分明,便于研究和分析线路工作原理的特点,是电器工程技术的通用技术语言。

    电路原理图只包括所有电气元件的导电部件和接线端点之间的相互联系,并不按照电气元件的实际位置来绘制,也不反映电气元件的大小,是电气控制电路安装、调试与维修的理论依据。

    比如,交流接触器的主触点和线圈分别画在不同的位置。

    e7100fa9a8d66d8ee0b438c64465bff4.png

    在电路图中,连接线一般采用实线,对有电联系的交叉线连接点用小黑圆点表示。

    电路原理图主要由电源电路、主电路、控制电路组成。

    c4f28bb93b5fd4fe01c7f4cab501420b.png

    电源电路在左侧用水平线画出,三相交流电源相序符号L1、L2、L3自上而下依次标在电源线左端。

    主电路是由电源引入电动机的大电流工作路径,垂直于电源电路画出。

    控制电路一般工作电流较小,主要实现对主电路中各控制器件主触点的控制。

    下面我们来学习三相异步电动机点动控制电路的组成。

    该电路由开启式负荷开关QS、熔断器FU1与FU2、交流接触器KM、按钮SB、电动机M组成。

    b7e9838bcce05047efdd806b92633eed.png

    点动控制在生产生活中应用很多,如机床刀架的移动,电动葫芦等。

    什么是点动控制呢?

    点动控制是指按下按钮,电动机通电运转,松开按钮,电动机断电停转。

    如电动葫芦上、下、左、右四个方向的运动以及运动距离,就是通过点动控制来实现的。

    eddc744cda3ab5087ac37503d14d5436.png

    电路各部分组成包括开启式负荷开关、熔断器、启动按钮、交流接触器、电动机。

    接通时,先合上QS,此时由于主电路上的主触点是断开状态,因此电动机未接通电源。按下按钮SB,接触器线圈KM通电,衔铁吸合,带动自身主电路的三对主触点闭合,电动机接通电源后运转。

    e140061b9acf96d1601afd4fe3fffac3.png

    松开按钮SB,接触器线圈KM断电,衔铁在复位弹簧作用下复位,带动三对主触点断开,电动机断电停转。

    cf3d670bea0fb35b86c7d519a3433827.png

    ​总结一下,今天一起学习了三相异步电动机点动控制电路的相关知识,电路图采用国家统一规定图形符号和文字符号来表示电路的连接情况。点动控制是指按下按钮,电动机通电运转,松开按钮,电动机断电停转。

    关注老安电工速学,分享更多电工知识!

    如需更多电工知识,请私信发送电工资料

    展开全文
  •  由于RS232接口标准出现较早,难免有不足之处,主要有以下四点: 1)接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL电平不兼容故需使用电平转换电路方能与TTL电路连接。 2)传输速率较低,在异步传输...
  • 三相异步电动机及其控制电路 实现电能与机械能相互转换电工设备总称为电机。...(2)工作原理;(3)表示转速与转矩之间关系机械特性;(4)起动、调速及制动基本原理和基本方法;(5)应用场合和如何正确使用。
  • 三相异步电动机正反停继电器控制电路的工作原理: 电动机正转:按下正转启动按钮SB2,SB2的常闭触头先断开,切断KM2线圈支路进行联锁保护。SB2的常开触头再闭合,使KM1线圈得电吸合,KM1的常闭触头先断开,切断KM2...
  • 有利于搞毕业设计星—三角降压起动控制电路的工作原理 星型-三角形降压启动,即电动机启动时,定子绕组按星型连接,每相绕组的电压降为三角星连接的,启动电流为三角形接法的1/3,在启动即将结束时再换成三角形
  • Verilog实现双口异步SRAM,进行原理介绍,Verilog实现,仿真验证,结果分析,以及电路综合结果,对SRAM有一个更深认识; 编写一个简单RAM很容易,但是要编写一个稳定,考虑全面RAM绝非易事。这也是为什么...

    在之前的工作中,我们对常见存储器件进行了名词扫盲,通过调用IP核实现了简单的单端口同步读写SRAM、通过Verilog实现了单端口同步读写SRAM、单端口同步写,异步读SRAM、单端口异步读写SRAM,双端口同步读写SRAM,以及双端口异步读写SRAM,这些工作见:

    Verilog实现RAM

    但是随着深入学习发现,之前实现的异步RAM更像是一个时钟无关的RAM;异步双口SRAM应该是读写时钟不同,才能叫异步,像之前写的“异步”SRAM实际为时钟无关的RAM,都没有时钟,如何称为异步?因此,重新对异步双口SRAM进行设计和验证:

    目录

    一、原理

    二、代码实现与仿真:

    三、参考文献:


    一、原理

    异步双口SRAM与双端口同步读写SRAM类似,唯一区别就在于两组端口时钟不同,分别在其控制信号的作用下(如:片选、使能、地址等)进行读/写操作;

    输入端口有:(异步应该有两组时钟)

        reg clk1;//端口1对应时钟

        reg [3:0]a1;//输入地址(RAM深度为16,对应地址位宽为4)

        reg we1;// write enable,写使能时进行RAM写操作

        reg oe1;// output enable,输出使能时RAM读取的结果才能输出

        reg cs1;// 片选信号,选择读取哪一个RAM

    //  第二套

        reg clk2;//端口2对应时钟

        reg [3:0]a2;//输入地址(RAM深度为16,对应地址位宽为4)

        reg we2;// write enable,写使能时进行RAM写操作

        reg oe2;// output enable,输出使能时RAM读取的结果才能输出

        reg cs2;// 片选信号,选择读取哪一个RAM

    输入输出端口有:
        wire [7:0]d1;//读取RAM时数据输出/写入RAM时数据输入   

        wire [7:0]d2;//读取RAM时数据输出/写入RAM时数据输入

     

    工作过程:

    两组端口在各自时钟驱动下,独立的根据各自的控制信号cs/we/oe执行对应的操作;工作过程类似:

    cs有效(为1)、we为1时,写使能,将d输入数据写入a对应地址处;

    cs有效(为1)、we为0时,读使能,oe有效(为1)时将a地址处的数据读出到d上;

    注意:

    双端口RAM同时读写时会出现冲突,如:同时对同一地址读操作,此时两个端口能直接同时读出数据吗?存在仲裁吗?再如:同时对同一地址进行写操作,此时写地址的结果应该是啥?是报错?是仲裁?写的内容是哪个端口的内容?还是说内容杂糅在一起;这就想起来之前看过的一句话,编写一个简单的RAM很容易,但是要编写一个稳定的,考虑全面的RAM绝非易事。这也是为什么推荐使用IP核的原因,因为IP核是众多工程师努力的结晶,相对来说更稳定,考虑的更全面。但是此处为了了解RAM的工作流程,暂不考虑复杂的情况,只对RAM的简单功能进行仿真实现。

     

    二、代码实现与仿真:

    接着之前的工作----仍旧实现一个位宽8bit,深度16bit的双口异步SRAM;

    实现代码:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: guoliang CLL
    // 
    // Create Date: 2020/03/04 15:51:18
    // Design Name: 
    // Module Name: dsram
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module dsram
    #(parameter DW = 8,AW = 4)
    (
        input clk1,
        input [AW-1:0]a1,//address
        input cs1,// chip select
        input oe1,// output enable
        input we1,// write enable
        inout [DW-1:0]d1,// data
        // 
        input clk2,
        input [AW-1:0]a2,//address
        input cs2,// chip select
        input oe2,// output enable
        input we2,// write enable
        inout [DW-1:0]d2// data
        );
    
    // 
    parameter DP = 1 << AW;// depth 
    reg [DW-1:0]mem[0:DP-1];
    reg [DW-1:0]reg_d1;
    // port2
    reg [DW-1:0]reg_d2;
    //initialization
    // synopsys_translate_off
    integer i;
    initial begin
        for(i=0; i < DP; i = i + 1) begin
            mem[i] = 8'h00;
        end
    end
    // synopsys_translate_on
    
    // read declaration
    // port1
    always@(posedge clk1)
    begin
        if(cs1 & !we1 & oe1)
            begin
                reg_d1 <= mem[a1];
            end
        else
            begin
                reg_d1 <= reg_d1;
            end
    end
    // port2
    always@(posedge clk2)
    begin
        if(cs2 & !we2 & oe2)
            begin
                reg_d2 <= mem[a2];
            end
        else
            begin
                reg_d2 <= reg_d2;
            end
    end
    
    // wrirte declaration
    // port1
    always@(posedge clk1)
    begin
        if(cs1 & we1)//port1 higher priority
            begin
                mem[a1] <= d1;
            end
        else
            begin
                mem[a1] <= mem[a1];
            end    
    end
    //port2
    always@(posedge clk2)
    begin
        if(cs2 & we2)
            begin
                mem[a2] <= d2;
            end
        else
            begin
                mem[a2] <= mem[a2];
            end    
    end
    
    // 三态逻辑
    assign d1 = (cs1 & !we1 & oe1) ? reg_d1 : {DW{1'bz}};
    assign d2 = (cs2 & !we2 & oe2) ? reg_d2 : {DW{1'bz}};
    endmodule
    

    测试文件:

    测试设计:port1对应快时钟clk1,port2对应慢时钟clk2;

    1、port1在clk1驱动下从地址0-15写数据1-16;port2同时在clk2驱动下从地址0-15读数据;

    2、port1在clk1驱动下从地址15-0读数据;port2同时在clk2驱动下从地址15-0写数据oxff;

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: CLL
    // 
    // Create Date: 2020/03/04 16:42:17
    // Design Name: 
    // Module Name: dsram_tsb
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module dsram_tsb(
    
        );
    // port declaration
    reg clk1;
    reg clk2;
    // port1
    reg [3:0]a1;//address
    reg cs1;
    reg oe1;
    reg we1;// write enable
    wire [7:0]d1;//datain/out 
    // port2
    reg [3:0]a2;//address
    reg cs2;
    reg oe2;
    reg we2;// write enable
    wire [7:0]d2;//datain/out 
    // reg declaration
    reg [7:0]din1;
    reg [7:0]din2;
    // clk1
    initial
    begin
        clk1 = 1'b0;
        forever #10 clk1 = ~clk1;//period = 20
    end
    // clk2
    initial
    begin
        clk2 = 1'b0;
        forever #25 clk2 = ~clk2;//period = 50
    end
    //
    assign d1 = (cs1 & we1)?din1:8'bzzzz_zzzz;
    assign d2 = (cs2 & we2)?din2:8'bzzzz_zzzz;
    //port1
    initial
    begin
    ///
        fork// port1写,port2读
            begin
                a1 = 4'b0000;
                din1 = 8'd1;
                we1 = 1'b1;
                oe1 = 1'b0;
                cs1 = 1'b1;
                repeat(15) begin//port1写1-16于地址0-15
                #20 a1 = a1+1'b1;
                din1 = din1+1'b1;
                end
            end
            begin
                a2 = 4'b0000;
                din2 = 8'd0;
                we2 = 1'b0;
                oe2 = 1'b1;
                cs2 = 1'b1;
                repeat(15) begin//port2读地址0-15
                #50 a2 = a2+1'b1;
                end
            end
        join
    ///
        #50//执行完后,port1读,port2写
        fork// port1写,port2读
            begin
                we1 = 1'b0;
                oe1 = 1'b1;
                cs1 = 1'b1;
                repeat(15) begin//port1读于地址15-0
                #20 a1 = a1-1'b1;
                end
            end
            begin
                din2 = 8'b1111_1111;
                we2 = 1'b1;
                oe2 = 1'b0;
                cs2 = 1'b1;
                repeat(15) begin//port2写11111111于地址15-0
                #50 a2 = a2-1'b1;
                end
            end
        join
    end
    dsram inst (
      .clk1(clk1),
      .a1(a1),      // input wire [3 : 0] a
      .d1(d1),      // input wire [7 : 0] d
      .we1(we1),    // input wire we
      .cs1(cs1), 
      .oe1(oe1),
      .clk2(clk2),  
      .a2(a2),      // input wire [3 : 0] a
      .d2(d2),      // input wire [7 : 0] d
      .we2(we2),    // input wire we
      .cs2(cs2), 
      .oe2(oe2)  
    );
    endmodule
    

    仿真结果如下:

    1、port1在clk1驱动下从地址0-15写数据1-16;port2同时在clk2驱动下从地址0-15读数据;如下:

    可以看出,读写分别对应各自的clk上升沿,port1在clk1驱动下将数据1-16写入了mem的[0-15],port2在clk2驱动下以一个较慢的速度从地址0-15读出数据1-16,与设计一致;


    2、port1在clk1驱动下从地址15-0读数据;port2同时在clk2驱动下从地址15-0写数据oxff;如下:

    可以看出,读写分别对应各自的clk上升沿,port1在clk1驱动下快速从地址15-0读出之前写进去的数据16-1,读数据较快不受port2新写入的oxff影响,port2在clk2驱动下以一个较慢的速度向地址15-0写数据oxff,与设计一致;

    RTL电路如下:

    三、参考文献:

    verilog怎么写能综合出异步的RAM

    verilog中的fork...join用法

    展开全文
  • 异步电机

    2020-12-28 14:36:46
    三相异步电动机的工作原理 三相异步电动机的铭牌数据 三相异步电动机的定子绕组 三相异步电动机的钉子磁动势及磁场 三相异步电动机定子绕组的电动势 三相异步电动机的运行原理 三相异步电动机运行时的电磁过程 三相...

    三相异步电动机的基本原理

    三相异步电动机的结构

    三相异步电动机的工作原理

    三相异步电动机的铭牌数据

    三相异步电动机的定子绕组

    三相异步电动机的钉子磁动势及磁场

    三相异步电动机定子绕组的电动势

    三相异步电动机的运行原理

    三相异步电动机运行时的电磁过程

    三相异步电动机的等效电路及相量图

    三相异步电动机的功率和转矩

    三相异步电动机的工作特性机器测取方法

    三相异步电动机参数的测定

    三相异步电动机转矩与转差率的关系

    单相异步电动机

    直线异步电动机

    展开全文
  •  主电路是给异步电动机提供调压调频电源电力变换部分,变频器电路大体上可分为两类:电压型是将电压源直流变换为交流变频器,直流回路滤波是电容。电流型是将电流源直流变换为交流变频器,其直流...
  •  同步串行通信状态:速率高,硬件电路复杂,需要同时使用两条信号线,所以只能使用单工方式或半双工方式工作。  异步串行通信状态:方式简单,传输速率不高,应用广泛,方便与其他通信标准进行衔接。  异步传输...
  • 无刷直流电机工作原理 无刷直流电机由电动机主体和驱动器组成,是一种典型机电一体化产品。 电动机定子绕组多做成三相对称星形接法,同三相异步电动机十分相似。电动机转子上粘有已充磁永磁体,为了检测电动...
  • CD40110为十进制可逆计数器/锁存器/译码器/驱动器,具有加减计数,计数器状态锁存,七段显示译码输出等...R(5脚)为清零端,R=1时,计数器异步清零。CP为时钟端,CPu(9脚)为加法计数时钟,CPD(7脚)为减法计数时钟。...
  • 74LS161为二进制同步计数器,具有同步预置数、异步清零以及保持等功能。1、74LS161引脚图2、74LS161真值表及功能注:QCC=CTr·Q0·Q1·Q2·Q3从功能表第一行可知,当CR=0(输入低电平),则不管其他输入端(包括CP端...
  •  主电路是给异步电动机提供调压调频电源电力变换部分,变频器电路大体上可分为两类:电压型是将电压源直流变换为交流变频器,直流回路滤波是电容。电流型是将电流源直流变换为交流变频器,其直流...
  • 永磁同步电动机永磁同步电动机定子永磁同步电动机定子结构与工作原理与交流异步电动机一样,多为4极形式,本课件电机定子铁芯有24个槽,图1是安装在机座内定子铁芯。图1—定子铁芯与机座电机绕组按3相4极布置...
  • 在DCDC降压电路中存在同步整流和异步整流两种工作方式,这两种方式的工作原理图如下 从上图可以看出,异步整流和同步整流的区别,就在于同步整流采用了通态电阻极低的MOSFET管代替了二极管。相比于异步整流使用...
  • 本节书摘来自异步社区《Cadence 16.6电路设计与仿真从入门到精通》一书中第2章,第2.1节,作者: 王超 , 胡仁喜等 更多章节内容可以访问云栖社区“异步社区”公众号查看。 第2章 原理图设计概述 Cadence 16.6电路...
  • 主电路是为异步电机提供调压调频电源的功率转换部分,台达变频器的主电路大致可分为两类:电压型是将电压源的直流转换为交流的变频器,直流电路的过滤器是电容器。电流型是将电流源的直流转换为交流的变频器,其直流...
  • 三相异步交流电动机具有结构简单、维修方便、运行可靠特点,与同容量其他电动机比重量轻、成本低、价格便宜,因此得到广泛应用。 在三相笼型异步电动机正反转控制线路中,可采用两只接触器KM1、KM2换接电动...
  • 电路是给异步电动机提供调压调频电源电力变换部分,变频器电路大体上可分为两类[1]:电压型是将电压源直流变换为交流变频器,直流回路滤波是电容。电流型是将电流源直流变换为交流变频器,其直流...
  • 它可用来分配电能,不频繁地启动异步电动机,对电源线路及电动机等实行保护,当它们发生严重过载或者短路及欠压等故障时能自动切断电路,其功能相当于熔断器式开关与过欠热继电器等组合。而且在分断故障电流后一般...
  • 同步开关稳压器由于效率高,在负载点(POL)电源领域广泛应用。但是相对于异步开关稳压器,...同步开关稳压器VS异步开关稳压器开关稳压器的工作原理是:通过重复切换开关(如下图的S1、S2)的“通”和“断”状态,把DC输...
  • 阐述了无轴承异步电机基本工作原理,并根据其悬浮和控制要求设计了硬件控制系统,给出了硬件电路图,通过实验得到试验波形。实验表明设计硬件电路可以作为无轴承电机驱动通用逆变器电路,且性能可靠。基于本硬件电路...
  • 分析了两重STATCOM电路结构和工作原理,以及12脉冲STATCOM控制方法。通过仿真研究表明,所提出补偿技术方法具有大范围连续调节高压交流异步电动机动态无功功率能力,谐波含量远低于仅采用12脉冲大容量...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 140
精华内容 56
关键字:

异步电路的工作原理