数字设计&verilog 每周一练(一 二)

[复制链接]
楼主: Fourier00
手机看帖
扫描二维码
随时随地手机跟帖
niemin321| | 2011-12-18 17:17 | 显示全部楼层
mark

使用特权

评论回复
wfbisheng| | 2012-1-4 21:18 | 显示全部楼层
支持楼主

使用特权

评论回复
huazi715| | 2012-1-7 16:30 | 显示全部楼层
楼主,我一点都不会啊,你们用的什么设计软件,推荐一下,谢谢

使用特权

评论回复
lxtiger| | 2012-3-12 21:08 | 显示全部楼层
强人很多啊!!!

使用特权

评论回复
apollolovely| | 2012-3-26 21:02 | 显示全部楼层
谢谢楼主,支持下去,楼主**下去

使用特权

评论回复
zaiming| | 2012-4-13 12:28 | 显示全部楼层
这个帖子让我十分佩服,俺正在学习这方面的知识,20楼的可以给我些比较好的modulsim的资料吗。还有就是testbench怎么写啊,这方面不会。

使用特权

评论回复
阳光boy| | 2012-5-27 12:05 | 显示全部楼层
lz真心给力啊~~~新人来报道啦~~

使用特权

评论回复
ZHCX| | 2012-7-22 14:59 | 显示全部楼层
不错的资料、、

使用特权

评论回复
ZHCX| | 2012-7-22 15:00 | 显示全部楼层
顶一个

使用特权

评论回复
lixupengarm| | 2012-8-31 16:36 | 显示全部楼层
关注

使用特权

评论回复
饿米唾佛| | 2012-9-2 16:23 | 显示全部楼层
顶一个,不错!

使用特权

评论回复
seaboy6| | 2012-10-11 23:23 | 显示全部楼层
这个很好啊,为什么后面没有了,求开版

使用特权

评论回复
LG2012GG| | 2012-10-12 18:23 | 显示全部楼层
辛苦啦

使用特权

评论回复
xuewuhen2015| | 2012-11-9 11:24 | 显示全部楼层
module check_edg(clk_slow,clk_fast,rst,dout);

    input clk_slow;
    input clk_fast;
    input rst;
    output[2:0];

     reg temp_1d;
        reg temp_2d;
        reg temp_3d;

    always @(posedge clk_slow)
        if(rst) begin
           temp_1d <= 1‘b0;
        end
        else begin
           temp_1d <= ~temp_1d;
         end
always @(posedge clk_fast)
        if(rst) begin
           temp_2d <= 1‘b0;
           temp_3d <= 1‘b0;
        end
        else begin
           temp_2d <= temp_1d;
           temp_3d <=temp_2d;
        end

assign dout[0] = temp_2d && (~temp_3d); //上升沿
assign dout[1] = (~temp_2d) && temp_3d;//下降沿
assign dout[2] = (temp_2d) ^ temp_3d;//上升沿和下降沿

endmodule

使用特权

评论回复
xuewuhen2015| | 2012-11-9 11:26 | 显示全部楼层
同步设计是在同一个时钟控制下的设计,异步设计是在不同时钟控制下的设计

使用特权

评论回复
ldx521| | 2012-12-11 00:34 | 显示全部楼层
顶起来

使用特权

评论回复
zuccfhf| | 2012-12-12 15:16 | 显示全部楼层
其实学校里之前都学过,但是都忘光了,哎。。。

使用特权

评论回复
bearpp| | 2013-1-5 17:41 | 显示全部楼层
aceice 发表于 2011-10-17 19:49
最近也刚开始学FPGA,发段PWM的程序和RTL图,希望高手指点指点。

代码不错,不过最好把输出改成寄存器输出,而不是组合逻辑输出。
always @(posedge pwmclk)
  if(pwmrst_n)
    pwmout <= 1'b0;
  else
     pwmout <= counter >= (pwmvalue-1'b1);
当然这里要考虑pwmvalue=0的情况

使用特权

评论回复
bearpp| | 2013-1-5 17:59 | 显示全部楼层
aceice 发表于 2011-10-17 19:57
干脆多发点,自学,也不知道对不对~一段按键消抖程序,自认为扩展性很好,资源占用也不是很多。

...

貌似复杂了点,可以不用状态机。另外如果要用状态机,最好用3段式的经典写法。
always @(posedge keyclk)
  if(!keyrst_n)
    counter <= 28'd0;
  else if((!key0_n || !key1_n) && !delay_time)
    counter <= 28'd0;
  else if(delay_time)
    counter <= counter+1'b1;

always @(posedge keyclk)
   if(!keyrst_n)
      delay_time <= 1'b0;
   else if(counter==28'd1_250_000)
       delay_time <= 1'b0;
   else if(~delay_time & (!key0_n || !key1_n))
      delay_time <= 1'b1;
  
  always @(posedge keyclk)
    if(~keyrst_n)
      keyvalue <= 2'b11;
    else if(counter==28'd1_250_000)
      keyvalue <= ({key1_n, key0_n} != 2'b00) ? {key1_n, key0_n} : keyvalue;

对于原来的代码还是有些不理解,为什么在25ms延时之后对key0_n,key1_n的采样要用2个状态,第一个状态采样01和10状态,如果不是就从头来(如果此时是00呢?)。而第二个状态采样11
所以我的代码和你的原始代码的功能不完全相同
  

使用特权

评论回复
as@yangjun| | 2013-2-5 13:25 | 显示全部楼层
顶!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则