原创 [博客大赛]关于verilog和数字电路的关系(二)

2013-8-27 14:24 3234 17 19 分类: FPGA/CPLD 文集: xilinx FPGA

7、动态移位寄存器

assign DO = data[SEL];
always @(posedge CLK)
begin
    if (CE == 1’b1)
        data <= {data[DATAWIDTH-2:0], SI};
end
        动态移位寄存器与移位寄存器相比,则是在描述好了移位寄存器后,通过描述连线,将需要的某位寄存器值连接至输出来实现。verilog是在画一幅电路图,所以这些语句块之间的顺序不会影响电路的结构。

8、选择器

always @(sel or di)
begin
    case (sel)
        3’b000 : do = di[7];
        3’b001 : do = di[6];
        3’b010 : do = di[5];
        3’b011 : do = di[4];
        3’b100 : do = di[3];
        3’b101 : do = di[2];
        3’b110 : do = di[1];
    default : do = di[0];
endcase
end
        或者
always @(sel or di)
begin
    if (sel == 3’b000) do = di[7];
    else if (sel == 3’b001) do = di[6];
    else if (sel == 3’b010) do = di[5];
    else if (sel == 3’b011) do = di[4];
    else if (sel == 3’b100) do = di[3];
    else if (sel == 3’b101) do = di[2];
    else if (sel == 3’b110) do = di[1];
    else do = di[0];
end
        在C语言里,if、case都是控制程序的分支走向,在verilog里,就是一个选择器了。上面利用if和case描述了一个8-1的选择器。

9、存储器

reg [NB_COL*COL_WIDTH-1:0] RAM [SIZE-1:0];
always @(posedge clk)
begin
do <= RAM[addr];
end
generate
genvar i;
    for (i = 0; i < NB_COL; i = i+1)
        begin
           always @(posedge clk)
            begin
                if (we)
                    RAM[addr][(i+1)*COL_WIDTH-1:i*COL_WIDTH] <=di[(i+1)*COL_WIDTH-1:i*COL_WIDTH];
            end
        end
endgenerate
        通过REG的数组可以描述一个存储器,在C中for是一个循环结构,而在verilog中,代表着将for中的描述的电路单元进行复制。
        有了上述的基本电路单元模块的描述,我们便可以根据想要生成的电路结构,利用原件描述加上连线描述来描绘出我们需要的并且能让软件看懂的电路结构了。在电路的描述过程中,verilog中使用的关键词和语法并不多,总结下来便是:
  • always+clk+"<="在连线之间插入寄存器。
  • always+"<="则在连线中插入锁存器。
  • if、case在元件中插入选择器,assign在元件之间插入连线。
  • 操作符则在连线中间插入逻辑函数和运算单元。
        利用这些操作便可以描述一个电路结构了。当然,为了让我们描述的电路方便管理移植等,可以利用parameter、generate等这些关键词来让电路的描述更加方便、管理和移植。

文章评论2条评论)

登录后参与讨论

用户439848 2013-8-21 19:12

good,这篇文章对我帮助很大,谢谢博主。

用户447620 2013-8-12 16:34

写的不错,期待更多含金文章
相关推荐阅读
用户449796 2013-09-20 11:39
基于Matlab的数字图像处理——滤波原理——非线性空间滤波
概述     我们已经知道,线性空间滤波即为掩膜矩阵和图像矩阵的卷积/相关运算。本质上来说,是像素点值与像素点邻域像素点值之间的一种特殊运算关系,因为其运算规则为邻域像素点与对应掩膜系数相乘后相加的线...
用户449796 2013-09-08 21:35
数据结构学习笔记--线性表
数据结构学习笔记之线性表 1. 线性表      线性表是指:零个或多个数据元素的有限序列。      线性表的特点是:第一个元素无前驱,最后一个元素无后继。其他每个元素有且只有...
用户449796 2013-09-08 17:00
数据结构学习之数据结构相关定义
数据结构学习笔记之数据结构相关定义   1. 数据相关定义 何为数据结构?       答:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 ...
用户449796 2013-09-08 16:47
数据结构学习笔记--数据结构相关定义
  数据结构学习笔记之数据结构相关定义 1. 数据相关定义 何为数据结构?       答:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 ...
用户449796 2013-09-02 10:19
verilog中两个常用的选择器if和case
   看过一些资料,是研究if和case的好处和坏处,在什么时候该用if,在什么时候该用case等等的。但是看完这些分析后,并没有很明确地体会到这两者的优缺点,也没有体会这两个选择器该什么时候...
用户449796 2013-08-27 14:25
[博客大赛]详解如何搭建S5PV210的Eclipse集成开发环境(一)
  一、详解如何搭建S5PV210的eclipse集成开发环境 1. S5PV210处理器简介         S5PV210处理器是Samsung公司2009年推出的一款Cortex...
我要评论
2
17
关闭 站长推荐上一条 /2 下一条