Verilog HDL FPGA从入门到放弃(1)

xiaoxiao2021-02-28  22

      这是一篇入门文章,笔者也曾经迷茫过,也很困惑过,硬件编程是怎么样的,但是功夫不负有心人,希望我的文章获得读者的认同。谦虚使人进步,希望不足之处请提意见,对于有意思的东西大家可以探讨一下。

       硬件编程verilog 建模

      一个简单的模型  

      流水灯的实现

      

概念介绍

软核(SoftCore)verilog VHDL模型          称为软核

固核(FirmCore):电路结构编码文件NetList    称为固核。

硬核(HardCore): 电路结构版图掩模        称为硬核。

整体效果

首先采用Top-down she设计模式  生成的门级网表(NetList)结构如下  

!!!如何查看网表呢?   步骤:Quartus---> Tools--->Netlist

网表 文件如下图所示

接下来 就是子模块的建立

/******************系统硬件要求*******************************

系统时钟  晶振为50MHZ

复位     初始为0,按下为1

LED0

LED1

LED2

LED3

**************************************************/

//=====================================================//

module led0_module(clk,rst,LED_OUT); //!!!这里要记得加“;” /*******说明一下******* 输入为时钟和复位 输出为led灯 ****************/ input clk; input rst; output LED_OUT; /*******************************************/ Parameter T100MS=23’d5_000_000;//2^23超过5M所以位宽为23位的十进制下的5*10^6 //======接下来制作计数器======================================= Reg[22:0] Count0; //寄存器为Count0 always@(posedge clk or negedge rst) if(!rst) Count0<=23’d0;//寄存器清零 else if(Count0==T100MS) Count0<=23’d0;//寄存器清零 else Count0<=23’d0+1’b1; //=======接下来制作输出led的寄存器============= Reg rLED_OUT; //!!!1位寄存器不需要说明 always@(posedge clk or negedge rst) if(!rst) rLED_OUT <=1’b0;//1位二进制清零 else if(Count0>=23’d0&&Count0<=22’d1_250_000) rLED_OUT <=1’b1;//寄存器清零 else rLED_OUT <=1’b0; //============================================= assign LED_OUT= rLED_OUT; endmodule //!!!注意这里必须添加 结尾不用”;” /***************以上为模块1,其余三个模如法复制修改名称就可以************************************/ 接下来制作顶层模块 /*************** 制作顶层模块时注意最后文件也要保存为module后的名字一定要一致***********************************/ Module top_module(clk,rst, LED_OUT) //!!!该模块要保存为top_module.v文件 input clk; input rst; output[3:0] LED_OUT; //输出四盏灯 wire led0_out; //wire 表示物理量 module led0_module ( .clk(clk), . rst(rst), .LED_OUT(led0_out) ); wire led1_out; //wire 表示物理量 module led1_module ( .clk(clk), . rst(rst), .LED_OUT(led1_out) ); wire led2_out; //wire 表示物理量 module led2_module ( .clk(clk), . rst(rst), .LED_OUT(led2_out) ); wire led3_out; //wire 表示物理量 module led3_module ( .clk(clk), . rst(rst), .LED_OUT(led3_out) ); assign LED_OUT ={ led3_out , led2_out , led1_out , led0_out };// assign表示连续赋值 endmodule最终实现一个流水灯,基本建模就完成了

    

转载请注明原文地址: https://www.6miu.com/read-2350337.html

最新回复(0)