夏宇闻 发表于 2012-4-3 16:22:36

夏老师,您好,我verilog初学者,在学习中遇到个问题想请教您
我最近做一个加法器通过串口通信实现,发送和 ...
hjchen 发表于 2012-3-28 12:53 http://www.fpgaw.com/images/common/back.gif
你如果没有认真读过并彻底理解我书上第16章和第17章的内容,不要开始做任何比较复杂的项目。因为你不能理解数字系统的基本设计方法,我也无从下手来指导您的设计。读懂这二章中每一段代码的细节,按思考题要求独立编写一个页面读写的接口和多几条指令的RlSC CPU,否则您不可能理解真实的设计途径,自己乱写,没办法验证,如何能设计出功能完善正确的电路呢? 要理解设计方法学的概念,不仅仅是语法,这是一个完整的设计体系,可以帮助您发现问题改进设计直至完善。

夏宇闻 发表于 2012-4-3 16:23:32

夏老师,您好:
      我是刚学Verilog不久,最近一直在研究FPGA的串口通讯问题,但是编写的接收程序不能 ...
Newrenlan 发表于 2012-3-31 14:57 http://www.fpgaw.com/images/common/back.gif


    你如果没有认真读过并彻底理解我书上第16章和第17章的内容,不要开始做任何比较复杂的项目。因为你不能理解数字系统的基本设计方法,我也无从下手来指导您的设计。读懂这二章中每一段代码的细节,按思考题要求独立编写一个页面读写的接口和多几条指令的RlSC CPU,否则您不可能理解真实的设计途径,自己乱写,没办法验证,如何能设计出功能完善正确的电路呢? 要理解设计方法学的概念,不仅仅是语法,这是一个完整的设计体系,可以帮助您发现问题改进设计直至完善。

夏宇闻 发表于 2012-4-3 16:24:45

回复fpgaw
我要做一个动态可重构,用两个FPGA实现两种算法的动态切换,也就是用一个FPGA控制另一个FPGA ...
science361 发表于 2012-3-31 19:29 http://www.fpgaw.com/images/common/back.gif

你如果没有认真读过并彻底理解我书上第16章和第17章的内容,不要开始做任何比较复杂的项目。因为你不能理解数字系统的基本设计方法,我也无从下手来指导您的设计。读懂这二章中每一段代码的细节,按思考题要求独立编写一个页面读写的接口和多几条指令的RlSC CPU,否则您不可能理解真实的设计途径,自己乱写,没办法验证,如何能设计出功能完善正确的电路呢? 要理解设计方法学的概念,不仅仅是语法,这是一个完整的设计体系,可以帮助您发现问题改进设计直至完善。

夏宇闻 发表于 2012-4-3 16:26:22

夏老师 ,您好 我用的 DE4(Stratix IV GX EP4SGX230)开发板,其中有个例子调用了altpll和altgx   不知道怎么 ...
tjy389945230 发表于 2012-4-2 20:16 http://www.fpgaw.com/images/common/back.gif
    你如果没有认真读过并彻底理解我书上第16章和第17章的内容,不要开始做任何比较复杂的项目。因为你不能理解数字系统的基本设计方法,我也无从下手来指导您的设计。读懂这二章中每一段代码的细节,按思考题要求独立编写一个页面读写的接口和多几条指令的RlSC CPU,否则您不可能理解真实的设计途径,自己乱写,没办法验证,如何能设计出功能完善正确的电路呢? 要理解设计方法学的概念,不仅仅是语法,这是一个完整的设计体系,可以帮助您发现问题改进设计直至完善。

zx023c110 发表于 2012-4-3 21:46:53

夏老师:
      你好,我想请问一个关于ram的问题;
   ram ram(
             .addr(addr_in),
                   .clk(clk_r)'
                           .
                           .
                           .);
这样构建的一个ram就具有了存储功能吗,不用编写他的具体功能实现吗??

夏宇闻 发表于 2012-4-5 12:04:18

夏老师:
      你好,我想请问一个关于ram的问题;
   ram ram(
             .addr(addr_in),
      ...
zx023c110 发表于 2012-4-3 21:46 http://www.fpgaw.com/images/common/back.gif
当然要有具体的功能描述模块为基础,这个实例引用才能起作用。具体功能模块可以是自己用行为语句描述的模块,也可以是引用宏库中现成的模块,这样就不用自己编写,但在仿真时必须编译该模块的代码并加载后才能显示其功能。

开心果 发表于 2012-4-5 15:21:45

夏老师!!您好!!我刚开始学verilog,这是我写的AD芯片的TCL549的驱动程序,可是一直不好用,请您看看哪里错了?
modulead_convert(
         clk,                          //系统时钟50MH
         rst_n,                  //复位信号
         adc_clk,                  //AD转换时钟
         adc_data,          //输出的AD数据
         adc_cs_n,          //AD片选信号
         digit_o,                  //数码管段选信号
         cs                                  //数码管位选信号
         );
input    clk;         
input    rst_n;            
input    adc_data;
         
output   adc_clk;         
output   adc_cs_n;         
output digit_o;         
output    cs;            

reg    count;
reg   clk_64;      
always @(posedge clk)
        begin
                count<=count+1;
                if(count==0)
                        clk_64<=~clk_64;
        end
assign adc_clk=clk_64;
integer i;
parameter
        ini                =                10'b1000000000,
        waite                =                10'b0100000000,
        conver_1        =                10'b0010000000,
        conver_2        =                10'b0001000000,
        conver_3        =                10'b0000100000,
        conver_4        =                10'b0000010000,
        conver_5        =                10'b0000001000,
        conver_6        =                10'b0000000100,
        conver_7        =                10'b0000000010,
        conver_8        =                10'b0000000001;
reg state,state_next;
reg cnt;
reg num;
reg adc_cs_n;
initial state_next<=ini;
always @ (posedge clk_64 or negedge rst_n)
        begin
                if(!rst_n)
                        state<=ini;
                else
                        begin
                        state<=state_next;
                        end
        end
reg cs_n,digit;
always @ (state)
        begin
                case(state)
                        ini      :                begin
                                                                        num<=num+1;
                                                                        adc_cs_n<=0;
                                                                        if(num==0)
                                                                                begin
//                                                                                        adc_cs_n<=0;
                                                                                        state_next<=conver_1;
                                                                                end
                                                                end                       
                                                               
                        conver_1        :                begin
                                                //                        adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_2;
                                                                end
                        conver_2        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_3;
                                                                end
                        conver_3        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_4;
                                                                end
                        conver_4        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_5;
                                                                end
                        conver_5        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_6;
                                                                end
                        conver_6        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_7;
                                                                end
                        conver_7        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_8;
                                                                end
                        conver_8        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=waite;
                                                                end
                        waite                :                begin
                                                                        cnt<=cnt+1;
                                                                        adc_cs_n<=1;
                                                                        if(cnt==0)
                                                                                begin
                                                                                state_next<=ini;       
                                                                                end
                                                                end
                        default:                state_next<='bx;
                endcase                                                                       
        end
nixie_light(0,digit,cs,digit_o);
endmodule
转换时钟小于17us

开心果 发表于 2012-4-5 15:22:03

夏老师!!您好!!我刚开始学verilog,这是我写的AD芯片的TCL549的驱动程序,可是一直不好用,请您看看哪里错了?
modulead_convert(
         clk,                          //系统时钟50MH
         rst_n,                  //复位信号
         adc_clk,                  //AD转换时钟
         adc_data,          //输出的AD数据
         adc_cs_n,          //AD片选信号
         digit_o,                  //数码管段选信号
         cs                                  //数码管位选信号
         );
input    clk;         
input    rst_n;            
input    adc_data;
         
output   adc_clk;         
output   adc_cs_n;         
output digit_o;         
output    cs;            

reg    count;
reg   clk_64;      
always @(posedge clk)
        begin
                count<=count+1;
                if(count==0)
                        clk_64<=~clk_64;
        end
assign adc_clk=clk_64;
integer i;
parameter
        ini                =                10'b1000000000,
        waite                =                10'b0100000000,
        conver_1        =                10'b0010000000,
        conver_2        =                10'b0001000000,
        conver_3        =                10'b0000100000,
        conver_4        =                10'b0000010000,
        conver_5        =                10'b0000001000,
        conver_6        =                10'b0000000100,
        conver_7        =                10'b0000000010,
        conver_8        =                10'b0000000001;
reg state,state_next;
reg cnt;
reg num;
reg adc_cs_n;
initial state_next<=ini;
always @ (posedge clk_64 or negedge rst_n)
        begin
                if(!rst_n)
                        state<=ini;
                else
                        begin
                        state<=state_next;
                        end
        end
reg cs_n,digit;
always @ (state)
        begin
                case(state)
                        ini      :                begin
                                                                        num<=num+1;
                                                                        adc_cs_n<=0;
                                                                        if(num==0)
                                                                                begin
//                                                                                        adc_cs_n<=0;
                                                                                        state_next<=conver_1;
                                                                                end
                                                                end                       
                                                               
                        conver_1        :                begin
                                                //                        adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_2;
                                                                end
                        conver_2        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_3;
                                                                end
                        conver_3        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_4;
                                                                end
                        conver_4        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_5;
                                                                end
                        conver_5        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_6;
                                                                end
                        conver_6        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_7;
                                                                end
                        conver_7        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=conver_8;
                                                                end
                        conver_8        :                begin
                                        //                                adc_cs_n<=0;
                                                                        digit<=adc_data;
                                                                        state_next<=waite;
                                                                end
                        waite                :                begin
                                                                        cnt<=cnt+1;
                                                                        adc_cs_n<=1;
                                                                        if(cnt==0)
                                                                                begin
                                                                                state_next<=ini;       
                                                                                end
                                                                end
                        default:                state_next<='bx;
                endcase                                                                       
        end
nixie_light(0,digit,cs,digit_o);
endmodule
转换时钟小于17us

夏宇闻 发表于 2012-4-6 05:40:16

夏老师!!您好!!我刚开始学verilog,这是我写的AD芯片的TCL549的驱动程序,可是一直不好用,请您看看哪里 ...
开心果 发表于 2012-4-5 15:22 http://www.fpgaw.com/images/common/back.gif

错的地方很多,看来您读书不仔细,语法和可综合性问题您没有理解,测试模块也没有见到,可见您对数字系统的设计方法还没有入门。您读的是哪一本书?建议您从头到尾认真读一遍我编写的Verilog数字系统设计教程第二版,理解每个例题和思考题后再开始做设计项目。

开心果 发表于 2012-4-6 09:16:15

回复 298# 夏宇闻


    谢谢夏老师
页: 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39
查看完整版本: 至芯科技【夏宇闻教授专栏】与你一起搞定FPGA设计!