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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 18655|回复: 40

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

[复制链接]
发表于 2013-6-18 15:49:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 yiyunzisu 于 2013-6-18 15:52 编辑

360软件小助手截图20130618155347.jpg 求解啊
 楼主| 发表于 2013-6-18 16:36:38 | 显示全部楼层
回复 2# chen851112

按照你的思路,不知道写的对不对,麻烦能给看一下吗,谢谢了。
   module(da,wra_n,clka,clkb,rst_n,wrb,db);   input da,clka,clkb,rst_n,wra_n;
   output srb;
   output [7:0]  db;
   reg [7:0] r,po,q1_db;
   wire [7:0]  q2_db;


   always@(posedge clka or negedge rst_n)
   if(!rst_n)
   r<=0;
   else if (wra_n)
   r<={r,da};
[p=154, 2, left]assign
assign po=(wra_n)? r:8'b0;


always@(posedge clkb or negedge rst_n)
  if(!rst_n)
   {q2_db,q1_db}<=0;
  else begin
       {q2_db,q1_db}<={q1_db,po};
       wrb<=1;
        end
assign db<=q2_db;
endmodule
 楼主| 发表于 2013-6-18 17:33:06 | 显示全部楼层
回复 4# chen851112


   让您见笑了,没什么经验,那怎么改啊?
发表于 2013-6-18 17:47:31 | 显示全部楼层
我写了一个,希望能够指正
module convert(
        da,
        wra_n,
        clka,
        clkb,
        rst_n,
        wrb,
        db);   
input da,clka,clkb,rst_n,wra_n;
output srb;
output [7:0]  db;
reg [2:0] cnt;
reg [7:0] db_reg;
assign db=wrb?db_reg:0;
always@(posedge clka or negedge rst_n)
if(~rst_n) begin
        cnt<=0;
        db_reg<=0;
end
else if(~wra_n) begin
        cnt<=cnt+1;
        case(cnt)
                3'd0:db_reg[0]<=da;
                3'd1:db_reg[1]<=da;
                3'd2:db_reg[2]<=da;
                3'd3:db_reg[3]<=da;
                3'd4:db_reg[4]<=da;
                3'd5:db_reg[5]<=da;
                3'd6:db_reg[6]<=da;
                3'd7:db_reg[7]<=da;
                default:;
        endcase
end

always@(posedge clkb or negedge rst_n)
if(~rst_n)
        wrb<=0;
else if(wra_n && cnt==0)
        wrb<=1;
else if(wrb)
        wrb<=0;
endmodule
发表于 2013-6-18 18:13:08 | 显示全部楼层
1,做存储电路,在clka domain中,将wr_a有效时的数据latch下来,共8个period。
2,时钟转换电路,建议用handshake来做。clka domain采集到到8个bit的的时候将数据hold住,将ready信号发送到clockb domain。clkb 看到clka发送过来的数据后采集数据,一个周期后回执ready_down信号。
3,clka domain收到clkb发过来的ready_down信号后释放数据和counter。
发表于 2013-6-18 19:22:56 | 显示全部楼层
回复 8# xinu2009


   版主描述得很全面啊,要是能把verilog贴上来就更好了
发表于 2013-6-18 21:28:09 | 显示全部楼层
回复 8# xinu2009
第二三点能理解,但是第一点中“把什么什么latch下来”的说法有点不理解,是指用锁存器作为存储器?
发表于 2013-6-18 23:03:23 | 显示全部楼层
回复 7# chen851112
经你指点,前面把串数据保存下来改成这样:
always@(posedge clka or negedge rst_n)
if(~rst_n)

db_reg<=0;
else if(~wra_n)

db_reg<=db_pre;
end
assign db_pre={db_reg[6:0],da};

  异步处理的时序如果按照题目的图所示,就是你说的“在对wra_n取沿之前锁存两次。” 我感觉不是很明白,具体应该怎么做?
发表于 2013-6-19 09:28:24 | 显示全部楼层
回复 12# chen851112


   module memi(da,wra_n,clka,clkb,rst_n,wrb,db);input da,wra_n,clka,clkb,rst_n;
output wrb;
output[7:0] db;


reg wra_1,wra_2;
reg wrb;
reg[7:0] db;
reg[7:0] data;


always@(posedge clka or negedge rst_n)

if(!rst_n)

data<=8'b0;

else if(!wra_n)

data<={data[6:0],da};


always@(posedge clkb)
begin

wra_1<=wra_n;

wra_2<=wra_1;
end



assign wra_rising=wra_1&(!wra_2);


always@(posedge clkb)
if(wra_rising)

begin

db<=data;

wrb<=1;

end
else

begin

db<=8'hxx;

wrb<=0;

end
endmodule
是这个意思吗?
发表于 2013-6-19 10:08:56 | 显示全部楼层
回复 13# HADIST

串并转换及并行数据锁存部分ok
不过后面的时序还是要仔细斟酌。

这个代码,wr_b和db[7:0]相对于原始数据,latency满足不了要求(要求是只有2clka的latency)


可以通过仿真的方式,稍微调整就全部ok了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-25 19:53 , Processed in 0.030161 second(s), 10 queries , Gzip On, Redis On.

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