我是靠谱客的博主 聪明鞋垫,最近开发中收集的这篇文章主要介绍经典设计实例_整理加解释(14-20),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

例14.模为60的BCD码加法计数器

module count60(
input  [7:0] data,
input        clk,
input        reset, 
input        cin,//计数使能
output [7:0] qout,
output       cout
);

always@( posedge clk)begin
    if(reset)
        qout <= 0;
    else if(load)
        qout <= data;
    else if(cin) begin
        if(qout[3:0] == 4'd9)begin
            qout[3:0] <= 4'd0
            if(qout[7:4] == 4'd5)
                qout[7:4] <= 4'd0;
            else
                qout[7:4] <= qout[7:4] +4'd1;
        else
            qout[3:0] <= qout[3:0] + 4'd1;
    end
end

assign    cout = (qout == 8'h59 & cin)?1:0;

endmodule

BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。

                             

例15.用casez描述的数据选择器

module mux_casez(
input    a,
input    b,
input    c,
input    d,
input [3:0]select,

output reg out
);
always@(select or a or b or c or d)begin
    casez(select)
    4'b???1:    out = a;
    4'b??1?:    out = b;
    4'b?1??:    out = c;
    4'b1???:    out = d;
    default:    out = 0;
    endcase
end
endmodule

case、casez和casex的介绍请见博客文章。https://blog.csdn.net/zpc0212/article/details/88210915

例16. 隐含锁存器举例

module buried_ff(
input    a,
input    b,
output   reg c
);
always @(a or b)begin
    if((b == 1) && ( a== 1)) c = a&b;
end
endmoudle

例18.使用for语句描述七人投票表决器

module Voter7(
input     [6:0] voter;
output    reg   pass
);

reg [2:0] sum;
integer i;
always@(vote)begin
    sum = 0;
    for(i = 0;i <= 6;i = i + 1)
        if(vote[i])
            sum = sum + 1;
        else
            sum = sum
        if(sum[2])
            pass = 1;
        else
            pass = 0;
end
endmoudle

integer与reg的用法请见博客。https://blog.csdn.net/zpc0212/article/details/88206226

例19.用for语句实现2个8位数相乘

module mult_for(
input [8:1] a,
input [8:1] b,
output reg [16:1] outcome
);

integer i;

always@(a or b)begin
    outcome = 0;
    for(i = 1;i <= size;i = i+1)
    if(b[i])    outcome = outcome + (a << (i - 1)); //b为1的时候进行移位相加
end

endmoudle

例20.使用repeat实现8位二进制数的乘法

module mult_repeat(outcome,a,b);
patameter size = 8;
input [size:1] a,b;
output[2*size:1] outcome;
reg [2*size:1] temp_a,outcome;
reg [size:1]   temp_b;
always@(a or b)begin
    outcome = 0;
    temp_a = a;
    temp_b = b;
    repeat(size)begin
        if(temp_b[1])
            outcome = outcome + temp_a;
        temp_a = temp_a << 1;
        temp_b = temp_b >> 1;
    end
end
endmodule

例20.同一循环的不同实现方式

module loop1{};
    integer i;
    initial
        begin
        for(i = 0;i < 4;i = i + 1)
            $display("i = %h",i);
        end
endmodule

module loop2{};
    integer i;
    initial
        begin
        i = 0;
        while(i < 4)
            begin
                $display("i = %h",i);
                i = i + 1;
            end
        end
endmodule

module loop3{};
    integer i;
    initial
    begin
    repeat(4)
        begin
            $display("i = %h",i);
            i = i+1;
        end
    end
endmodule
    

三种循环方式。for,while,repeat。

 

最后

以上就是聪明鞋垫为你收集整理的经典设计实例_整理加解释(14-20)的全部内容,希望文章能够帮你解决经典设计实例_整理加解释(14-20)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部