首页 > 其他分享 >10-经典组合和时序电路

10-经典组合和时序电路

时间:2023-02-12 12:23:56浏览次数:42  
标签:10 begin always module 经典 input yout 时序电路 out

经典组合和时序电路

HDL的主流语言

  • VHDL
  • Verilog
  • System Verilog
    硬件描述层次
  • 门级(gate-level)
  • 寄存器传输级(RTL-Level)
  • 行为级
    RTL:Register Transfer Level
  • 可综合性,写的代码要可综合
  • 可阅读性,划分模块,增加代码的可阅读性

全加器

module fulladder(cout,sum,ain,bin,cin);
  
  input ain,bin,cinl=;      //定义端口
  output sum,cout;
  wire sum;                // 定义变量
  wire cout;
  
  assign sum = ain ^ bin ^ cin;        // 主体
  assign cout = (ain & bin)|(bin & cin)|(ain & cin);
  
endmodule

四选一选择器

module mux_4_1(C,D,E,F,S,Mux_out);
  input C,D,E,F;
  input [1,0] S; 
  output Mux_out;
  
  reg Mux_out;
  
  always@(C,D,E,F,S)
  begin
    case(S)
      2'b00 : Mux_out = C;
      2'b01 : Mux_out = D;
      2'b02 : Mux_out = E;
      default : Mux_out = F;
    endcase
  end

endmodule
  • 敏感列表中只要有一个信号发生变化,就会启动begin end
  • 使用always@(*) -- * 表示所有的输入
  • assign -- 使用wire类型

3-8译码器

module 3_8_Decoder(
  input wire [2:0] ain,  //三位开关
  input wire       enable,     //50Hz
  output reg [7:0] yout
);

  always@(ain or enable) begin
    if(!enable) 
      yout = 8'b0
    else 
      case(ain)
        3'b000 : yout = 8'b00000001;
        3'b001 : yout = 8'b00000010;
        3'b010 : yout = 8'b00000100;
        3'b011 : yout = 8'b00001000;
        3'b100 : yout = 8'b00010000;
        3'b101 : yout = 8'b00100000;
        3'b110 : yout = 8'b01000000;
        default : yout = 8'b10000000;
      endcase
  end  
endmodule
  • one-hot -- 输出的代码中只有一个为1

计数器

module count_en (enable,clock,reset,out);
  paramet er WIDTH = 8;
  Parameter UDLY  = 1;
  
  input clock,reset,enable;
  output [WIDTH-1:0] out;
  
  reg [WIDTH-1:0] out;

  always @ (posedge clock,negedge reset) begin
    if(!reset)
      out <= 8'b0;
    else if (enable)
      out <= #UDLY out+1
  end
endmodule
  • 时序逻辑的信号是reg或者是logic
  • 时序逻辑的信号是可以保持的
  • 寄存器一定要写enable,减少能耗
  • D端传输信号到Q端会有延迟信息
  • 异步复位可以理解为复位信号与时钟信号无关

逻辑操作

移位器

module shifter 
#(parameter B = 2)
(
  input [3:0] data,
  output reg [3:0] q1,q2
);

  always @ (data) begin
    q1 = data << B;
    q2 = data >> B;
  end
endmodule

D触发器的写法

module dff_async_pre
#(parameter U_DLY = 1)
(
  input data,clk,preset,
  output q
);
  always @ (posedge clk , negedge preset) begin
    if(~preset)
      q <= #U_DLY 1'b1;
    else
      q <= #U_DLY data;
  end
endmodule

同步复位的DFF


module dff_sync_pre
#(parameter U_DLY = 1)
(
  input data,clk,preset,
  output q
);
  always @ (posedge clk) begin
    if(~preset)
      q <= #U_DLY 1'b1;
    else
      q <= #U_DLY data;
  end
endmodule

带有异步复位和异步置位DFF

module dff_async_pre
#(parameter U_DLY = 1)
(
  input data,clk,preset,reset,
  output q
);
  always @ (posedge clk , negedge preset,reset) begin
    if(~preset)
      q <= #U_DLY 1'b1;
    else if (reset)
      q <= 1'b1;
    else
      q <= #U_DLY data;
  end
endmodule
  • 既能复位又可以置位的DFF,都有时钟无关

Testbench搭建

testbench的功能

  • RM - reference module
  • golden - 正确结果
  • 验证三要素:灌激励\集响应\做比较

tb实例

  1. 定义tb,写在一个没有输入的module中

  2. 定义时钟
    常用的写法
initial begin
   Clk = 0;
   forever #10 Clk = ~Clk;
end
  1. 例化DUT
  2. 生成激励
  3. 采集响应
  4. 调试bug

标签:10,begin,always,module,经典,input,yout,时序电路,out
From: https://www.cnblogs.com/Icer-newer/p/17112293.html

相关文章

  • 《Terraform 101 从入门到实践》 Functions函数
    《Terraform101从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。Terraform的函数Terraform为......
  • .NET技术分享日活动20221022
    2022年10月22日下午,个人组织举办了山东地区的第六次.NET技术分享日活动。围绕.NET、低代码LowCode、云原生CloudNative、大数据、算法等方向进行创新技术的实践分享。......
  • win10快捷键/浏览器快捷键
    这并不是一个快捷键,而是三个,这三个快捷键为:WIN+1、WIN+2、WIN+3。作用是打开任务栏上对应顺序的窗口。Win+数字打开的是任务栏上锁定的程序,其数字的顺序对应的是锁定的顺......
  • C语言:任意10个浮点数从小到大排序
    //冒泡排序:将任意10个浮点数从小到大排序#include<stdio.h>main(){floata[10],t;inti,j,k,b;for(i=0;i<=9;i++)scanf("%f",&a[i]);for(......
  • win10 0x0000011b共享打印机无法连接
    提供打印共享的win10由于升级后,其它需要使用打印机的windows电脑在连接共享的打印机时会有这个报错网上说在这台打印服务器上删除补丁即可,可以我没有找到,如:KB5005565补丁......
  • day11- 20.有效括号|1047.删除字符串中所有相邻重复项
    20.有效括号leetcode题目链接:https://leetcode.cn/problems/valid-parentheses/题目描述:给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字......
  • 1G=1024Mb 1Mb=1024kb 1kb=1000bp
     一直纠结这种单位换算,是1024还是1000,原来是这样计算的。  来源:https://www.jianshu.com/p/6da01c23d1c0 ......
  • HDU 1024 Max Sum Plus Plus
    题目大意:给定一个长度为\(n\)数组,求划分成\(m\)段不相交区间的子段和最大值得问题那么需要考虑得就是对于第i个数字,是否选中它在m个区间中,以及如果选中它那么它在第几个......
  • 代码随想录算法训练营第二十三天|LeetCode 669. 修剪二叉搜索树 、LeetCode 108.将有
    669.修剪二叉搜索树文章:代码随想录(programmercarl.com)视频:你修剪的方式不对,我来给你纠正一下!|LeetCode:669.修剪二叉搜索树_哔哩哔哩_bilibili思路:从图中可以看出......
  • (笔试题)经典题目
    题目代码一#include<stdio.h>#include<string.h>intmain(){chara[1000];inti;for(i=0;i<1000;i++){a[i]=-1-i;}printf("%d",strlen(a));return0;}分......