打印

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

[复制链接]
楼主: Fourier00
手机看帖
扫描二维码
随时随地手机跟帖
21
Tom2007| | 2009-9-22 13:56 | 只看该作者 回帖奖励 |倒序浏览
有的赋值后面加 #U_DLY 是什么意思呢

使用特权

评论回复
22
Tom2007| | 2009-9-22 14:00 | 只看该作者
还有3分频的程序中, 那个always 后面的*号是什么意思呢?

使用特权

评论回复
23
Fourier00|  楼主 | 2009-9-22 21:45 | 只看该作者
#U_DLY  代表延时,这个是不可综合的代码,只是仿真的时候用,看上去更像实践中的波形
个人感觉这个玩意就代表着 Tco  
always(*)
代表所有的敏感变量,用于写组合逻辑电路时候不用把所有输入敏感变量写上去。

使用特权

评论回复
24
Tom2007| | 2009-9-23 11:16 | 只看该作者
谢谢楼主!
我来回答第二周的第一个问题,我在网上查了查
异步电路主要是组合逻辑电路,用于产生地址译码器、FIFO或RAM的读写控制信号脉冲,但它同时也用在时序电路中,此时它没有统一的时钟,状态变化的时刻是不稳定的,通常输入信号只在电路处于稳定状态时才发生变化。也就是说一个时刻允许一个输入发生变化,以避免输入信号之间造成的竞争冒险。电路的稳定需要有可靠的建立时间和持时间,待下面介绍。
      同步电路是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有操作都是在严格的时钟控制下完成的。这些时序电路共享同一个时钟CLK,而所有的状态变化都是在时钟的上升沿(或下降沿)完成的。比如D触发器,当上升延到来时,寄存器把D端的电平传到Q输出端。
优缺点
异步电路:
       电路核心逻辑有用组合电路实现
       异步时序电路的最大缺点是容易产生毛刺。
       不利于器件移植
       不利于静态时序分析(STA)、验证设计时序性能。

同步时序电路:
       电路核心逻辑是用各种触发器实现
       电路主要信号、输出信号等都是在某个时钟沿驱动触发器产生的
       同步时序电路可以很好的避免毛刺
       利于器件移植
       利于静态时序分析(STA)、验证设计时序性能。

使用特权

评论回复
25
jqjszxd0| | 2009-9-25 16:05 | 只看该作者
这个也不懂啊!怎么办呀?

使用特权

评论回复
26
Fourier00|  楼主 | 2009-9-25 18:46 | 只看该作者
本帖最后由 Fourier00 于 2009-9-25 18:49 编辑

第一个是下降沿,第二个上升沿,第三个是双延
有兴趣的可以把代码也写一下看看

aaaaaaa.GIF (5.16 KB )

aaaaaaa.GIF

使用特权

评论回复
27
Tom2007| | 2009-9-27 18:36 | 只看该作者
这个电路对吗? 能检测in的上升沿和下降沿吗?

使用特权

评论回复
28
Fourier00|  楼主 | 2009-9-28 18:59 | 只看该作者
是对的 有什么疑问吗?

使用特权

评论回复
29
patrick007| | 2009-9-29 13:12 | 只看该作者
问一下Fourier,你20楼前两张图的那个是什么编辑环境?
我前几天看我们实验室一个硕士也是那个。

使用特权

评论回复
30
Fourier00|  楼主 | 2009-9-29 18:51 | 只看该作者
问一下Fourier,你20楼前两张图的那个是什么编辑环境?
我前几天看我们实验室一个硕士也是那个。
patrick007 发表于 2009-9-29 13:12

vim

使用特权

评论回复
31
sunny19832| | 2009-10-13 14:31 | 只看该作者
等我长大了 我也要答题

使用特权

评论回复
32
stormf1| | 2009-10-22 19:12 | 只看该作者
很强啊。。。很好的锻炼机会。能持续就很好了。。。
lz用的Verilog的仿真用的什么软件啊,没有开发板可以练习么?

使用特权

评论回复
33
Fourier00|  楼主 | 2009-10-22 21:45 | 只看该作者
ls 用的是modesim ,有很多时候是不需要开发板的 ,
仿真就能解决问题,其实你看到了开发板上的灯一闪一闪只不过是内部信号的高低电平的变换接到了管脚而已。
想学EDA可以不用开发板的,毕竟不是单片机,哈哈,希望大家不要观望了

使用特权

评论回复
34
Fourier00|  楼主 | 2009-10-22 21:45 | 只看该作者
ls 用的是modesim ,有很多时候是不需要开发板的 ,
仿真就能解决问题,其实你看到了开发板上的灯一闪一闪只不过是内部信号的高低电平的变换接到了管脚而已。
想学EDA可以不用开发板的,毕竟不是单片机,哈哈,希望大家不要观望了

使用特权

评论回复
35
flashxujun| | 2009-11-10 14:52 | 只看该作者
奇数分频的写写,占空比50%

Fourier00 你写的东西同时用到了clock的上升沿和下降沿,在高速的情况下要做特别约束

Module div_3(
    clk,
    rst_in,
    clk_div_o
);

//*********
// in/out
//*********
input    clk;
input    rst_in;
output clk_div_o;

//
//*************
//internal signals
//*************
reg[1:0]  cnt;
wire        clk_div3;
wire        clk_div3_1;


//main
always @ (posedge clk or posedge rst_in) begin
  if (rst_in) begin
    cnt <= #1 2'd0;
  end
  else begin
    if (cnt == 2'd2) begin
      cnt <= #1 2'd0;
    end
    else
       cnt <= cnt +1;
  end
end

assign clk_div3 = (cnt == 2'd0);
assign clk_div3_1 = (cnt == 2'd1) | clk;
assign clk_div3_o = clk_div3 | clk_div3_1; //glitch free

//
endmodule

使用特权

评论回复
36
flashxujun| | 2009-11-10 15:14 | 只看该作者
闲着也是闲着,再做一个吧

2  用电路或者verilog 描述一个检测上升沿和检测下降沿的。

严格意义上来说不算是一个上升沿和下降沿的检测,
只是同步到clk时钟域之后的被检测时钟的上下边沿检测,不过在同步设计里足够了
module posedge_det(
            clk,  //clk must be faster than clk2det * 2
            clk2det,
            rst,
           pose_det,
           neg_det
);

//*******
// in/out
//*******
input   clk,
input   rst,
input   clk_det,
output pose_det,
output neg_det,

//********
// internal signals
//********
wire clk2det_syn0;
wire clk2det_syn1;
wire clk2det_dly0;

//main
d1_dly1 clk_syn0(clk, rst, clk2det, clk2det_syn0);
d1_dly1 clk_syn1(clk2, rst, clk2det_syn0, clk2det_syn1); //syn clk2det to clk domain
d1_dly1 clk_dly0(clk, rst, clk2det_syn1, clk2det_dly0);

assign pose_det = ~clk2det_syn1 && clk2det_dly0;
assign neg_det  =   clk2det_syn1 && ~clk2det_dly0;  // last for 1T of clk

//
endmodule

module d1_dly1   (
             clk,
             rst,
             din,
             dot
             );
//***************************
// Inputs and Outputs
//***************************
input         clk;
input         rst;
input         din;
output        dot;
//
//
//**************************
// Internal Signals
//**************************

reg dot;


always @ (posedge clk or posedge rst) begin
  if(rst) begin
    dot  <= #1 0;
  end
  else begin
    dot  <= #1 din;
  end
end

//
endmodule

使用特权

评论回复
37
zxj36009808| | 2009-11-10 21:50 | 只看该作者
高人真多,学习中

使用特权

评论回复
38
zhaolqjn| | 2009-11-14 20:53 | 只看该作者
学习....

使用特权

评论回复
39
flanix| | 2009-11-24 13:47 | 只看该作者
我也给个题目:周期可控加减计数器。

使用特权

评论回复
40
zifeiyuuuu| | 2009-11-24 16:57 | 只看该作者
看了这么多的分频程序,14楼的我最喜欢, 收藏了,  呵呵

使用特权

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

本版积分规则