在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: yiyunzisu

[求助] 求解关于一道笔试题,用Verilog编一个接口转换电路

[复制链接]
发表于 2013-6-29 17:18:51 | 显示全部楼层
这里没明白1拍的同步器和2拍的同步器是什么?
----------------------------------------------------------------------
我觉得只能用1拍的同步器 不能用两拍的同步器完成故而代码如上
发表于 2013-7-1 14:16:20 | 显示全部楼层
说一个问题。从图上来看,采集da的数据用clka的下降沿比较好。不过这涉及到具体应用了,但从题目上来说上升沿也OK
发表于 2013-7-2 00:04:39 | 显示全部楼层
回复 19# chen851112

你看看我这个代码对不???

module top
(
    input clka,
    input clkb,
    input rst_n,
    input wra_n,
    input da,
    output wrb,
    output [7:0]db
);
// =============== Main Code Start ===============

reg [7:0]mem_p;
reg [7:0]mem_r;
always@(*)
begin:ac_clka_shifter
    mem_p = mem_r;
    if(!wra_n) begin
        mem_p = {mem_r[6:0],da};
    end
end

always@(posedge clka or negedge rst_n)
begin:as_mem_update
    if(!rst_n) begin
        mem_r <= 8'h00;
    end
    else begin
        mem_r <= mem_p;
    end
end

reg wra_r1;
reg wra_r2;
always@(posedge clkb or negedge rst_n)
begin:as_sync
    if(!rst_n) begin
        wra_r1 <= 1;
        wra_r2 <= 1;
    end
    else begin
        wra_r1 <= wra_n;
        wra_r2 <= wra_r1;
    end
end
assign wrb = (wra_r1 & !wra_r2);
assign db = wrb ? mem_r : 8'hzz;
endmodule
发表于 2013-7-2 08:52:47 | 显示全部楼层



教科书写法,严格的组合逻辑和时序逻辑分开。

另外请教一个问题:
第一个组合逻辑,没有else分支?这种写法能否OK?
发表于 2013-7-2 17:54:11 | 显示全部楼层


回复  xiaojia102003

if 么有问题。我看过了。
chen851112 发表于 2013-7-2 09:33




   我看错了,if前面有赋值语句,不会有问题。相当于else。
发表于 2013-7-3 17:18:00 | 显示全部楼层
回复 2# chen851112


    请教一个问题,在wra_n上升沿之前的锁存两次怎么实现?
看了大家的回复,我感觉大部分都只是注重了锁存,而是没有关注wrb上升沿之前的那两次锁存。特请教一下。
发表于 2013-7-4 10:20:38 | 显示全部楼层
试着写了一个,没有功能仿真
reg [7:0] db;
reg [2:0] cnt3bit_a;
reg [2:0] dvalid_a;
wire dvalid_a;
reg wr_b;
// a 时钟域
always @ (posedge clka or negedge rst_n) begin
  if(~rst_n)
    cnt3bit_a <= 0;
  else if(cnt3bit_a == 3'd7)
    cnt3bit_a <= 0;
  else if(~wra_n)
    cnt3bit_a <= cnt3bit_a + 1;
end
always @ (posedge clka or negedge rst_n) begin
  if(~rst_n)
    db <= 0;
  else if(~wra_n)
    db <= {db[6:0],da};
end
// 快到慢 打拍
always @ (posedge clka or negedge rst_n) begin
  if(~rst_n)
    dvalid_a <= 0;
  else if(wr_b) // b 时钟域信号
    dvalid_a <= 0;
  else if(cnt3bit_a == 3'd7)
    dvalid_a[0] <= 1'b1;
  else if(|dvalid_a)
    dvalid_a << 1;
end
发表于 2013-7-4 10:23:55 | 显示全部楼层
chen851112 异步时钟域取上升沿的方法很好
发表于 2013-7-4 10:59:57 | 显示全部楼层


试着写了一个,没有功能仿真
reg [7:0] db;
reg [2:0] cnt3bit_a;
reg [2:0] dvalid_a;
wire dvalid_a; ...
wide_road 发表于 2013-7-4 10:20




   你没有用到clkb?我赶脚32楼写的是最正式的。
发表于 2013-7-4 14:36:55 | 显示全部楼层
呵呵,讨论的好热烈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 17:25 , Processed in 0.024479 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表