这是一篇入门文章,笔者也曾经迷茫过,也很困惑过,硬件编程是怎么样的,但是功夫不负有心人,希望我的文章获得读者的认同。谦虚使人进步,希望不足之处请提意见,对于有意思的东西大家可以探讨一下。
硬件编程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最终实现一个流水灯,基本建模就完成了