自学内容网 自学内容网

IC秋招RTL代码合集

一 全加器和半加器

全加器

module full_adder1(
    input    Ai, Bi, Ci,
    output   So, Co);
 
    assign So = Ai ^ Bi ^ Ci ;
    assign Co = (Ai & Bi) | (Ci & (Ai | Bi));
endmodule
module full_adder1(
    input    Ai, Bi, Ci
    output   So, Co);
 
    assign {Co, So} = Ai + Bi + Ci ;
endmodule

半加器

解释

1 全加器:

(1)概念:考虑来自低位的进位

 

(2)信号:

描述信号位宽类型
加数1Ai1bitinput
加数2Bi1bitinput
来自低位的进位Ci1bitinput
相加和So1bitoutput
向高位进位Co1bitoutput

(3)真值表:穷尽所有输入的组合

(4)表达式

2 半加器:

(1)概念:不考虑来自低位的进位

(2)信号:

描述信号位宽类型
加数1Ai1bitinput
加数2Bi1bitinput
求和So1bitoutput
进位Co1bitoutput

(2)真值表和表达式:穷尽所有输入的组合-根据真值表为1的写表达式并化简

二 分频器:奇数、偶数

三 复位:同步复位、异步复位、异步复位同步释放

同步复位

module sync_reset(
    input       rst_n,  //同步复位信号
    input       clk,   //时钟
    input       din,   //输入数据
    output reg  dout   //输出数据
    );
    
    always @(posedge clk) begin   //复位信号不要加入到敏感列表中
        if(!rst_n)  
            dout <= 1'b0 ; //rstn 信号与时钟 clk 同步
        else       
            dout <= din ;
    end
    
endmodule

异步复位

module async_reset(
    input rst_n,
    input clk,
    input din,
    output reg dout
   );
   
   always@(posedge clk or negedge rst_n)begin  //复位信号要加到敏感列表中
        if(rst_n)
            dout <= 1'b0;
        else
            dout <= din;
    end
    
endmodule 

异步复位同步释放

module asreset_srelease(
    input rst_n,
    input clk,
    input din,
    output reg dout
    );
    
    reg rst_n1,rst_n2;
    always@(posedge clk or negedge rst_n)begin
        if(!rst_n)begin
            rst_n1 <= 1'b0;    //异步复位
            rst_n2 <= 1'b0;
        end
        else begin
            rst_n1 <= 1'b1;    //同步释放
            rst_n2 <= rst_n1;  //同步打拍,时序差可以多延迟几拍
        end
    end
 
 //使用 rstn_r2 做同步复位,复位信号可以加到敏感列表中   
    always@(posedge clk or negedge rst_n2)begin
        if(!rst_n2)
            dout <= 1'b1;
        else
            dout <= din;
    end
endmodule

解释:

是否同步的判断:指的是复位信号是否受时钟信号干扰才能完成复位

同步复位:复位信号在时钟有效边沿到来时有效。如果没有时钟,无论复位信号怎样变化,电路也不执行复位操作。

异步复位:无论时钟到来与否,只要复位信号有效,电路就会执行复位操作。

异步复位同步释放:即复位信号到来时不受时钟信号的同步,复位信号释放时需要进行时钟信号的同步。为消除异步复位的缺陷,复位电路往往会采用"异步复位、同步释放"的设计方法。

信号位宽类型描述
rst_n1bitinput复位
clk1bitinput时钟
din1bitoutput输入数据
dout1bitoutput输出数据

写RTL思路:

1 想电路的基本原理

2 输入、输出信号设计:框图、表格(信号名、位宽、类型(input or output)、功能描述)

3 绘制真值表、理论波形图:根据输入信号组合绘制,全面覆盖所有输入情况

4 代码编写

5 波形分析

常见数字电路:

1 逻辑函数表示方法和相互转换

(1)

逻辑表达式:

真值表:将输入变量所有可能的取值与相应的函数值列成的表

逻辑图:用与、或、非等逻辑符号表示逻辑函数中各变量之间的逻辑关系所得到的图形

波形图:输入和输出关系按时间顺序依次排列得到的图形

卡诺图(表达式的化简):将此函数的最小项表达式中的各项最小项相应地填入一个特定的方格图内,此方格图为卡诺图

(2)表示方法的相互转换

仿真常见问题:

1 在使用vivado进行后方真时会出现所有波形均为高阻态,不定态的现象。

解决:
decoder3_8_tb文件set as top,设置为 顶层文件,在 vivado中需要 手动设置,在Quartusii中仅有一个待测试文件时会自动设置为顶层文件。设置完顶层文件后再进行综合后可以看到行为级仿真下多了两个选项:功能仿真,和时序仿真。现在点击 功能仿真查看波形:

原文地址:https://blog.csdn.net/qq_46075386/article/details/140609871

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!