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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
楼主: lvlv2011

2011年9月3日MTK硬件部门的笔试题:根据时序图写verilog代码

[复制链接]
发表于 2011-10-4 20:54:08 | 显示全部楼层
回复 10# lvlv2011


    膜拜下。看了好一会儿才看明白。
 楼主| 发表于 2011-10-5 00:11:30 | 显示全部楼层
回复 21# danglang


   
其实是要跳出思维定势,平时可能时序电路接触的比较多,就不会想到用组合电路来做
发表于 2011-10-10 11:52:55 | 显示全部楼层
always@(clk)
     a_q <= a;
  assign b = a ^ a_q;
发表于 2011-10-11 11:45:52 | 显示全部楼层
楼上的写错了,少了posedge
话说这个题目应该还是挺基础的
发表于 2011-10-11 15:13:47 | 显示全部楼层
回复 25# pontiff


    确实是写错了,少写了个posedge。谢谢指正
发表于 2011-10-12 05:45:04 | 显示全部楼层
这就是个 双沿的 edge detector
可以用mealy fsm实现

moore就不行了 太慢
发表于 2011-10-12 05:48:27 | 显示全部楼层
//This is a dual-edge detector based on mealy FSM
module detector
(
        input wire clk, reset,
        input wire level,
       
        output reg tick
);

        localparam zero = 1'b0,
                   one = 1'b1;
       
        reg state_reg, state_next;

        always @(posedge clk, posedge reset)
        begin
                if (reset)
                        state_reg <= zero;
                else
                        state_reg <= state_next;
        end

        always @*
        begin
                state_next = state_reg;
                tick = 1'b0;
                case (state_reg)
                       
                zero:
                begin
                        if (level)
                        begin
                                state_next = one;
                                tick = 1'b1;
                        end       
                end
       
                one:
                begin
                        if (!level)
                        begin
                                state_next = zero;
                                tick = 1'b1;
                        end
                end

                default: state_next = zero;
                endcase
        end


endmodule
发表于 2011-10-13 13:21:56 | 显示全部楼层

testbench wave

testbench wave


testbench波形图
代码如下:
module detect_wave(input clk,a,

   output c
);
   reg b;
   always @(posedge clk)

begin

b=a;

end

assign c=a^b;
endmodule


`timescale 1ns/10ps
module detect_wave_tb;

reg clk,a;
// instantitate the unit under test


detect_wave uut( .clk(clk),.a(a),.c(c));

initial

begin

clk=0;

a=0;

#15;

a=1;

#35;

a=0;

#40;

a=1;

#52;

a=0;

#69;

a=1;

#75;

a=0;

#20;

$stop;

end

always #10 clk=~clk;
endmodule
发表于 2011-10-13 14:58:42 | 显示全部楼层
a与clk是异步的,不知道大家为何都可以不同步直接用clk采样a来使用!???
发表于 2012-5-11 14:53:16 | 显示全部楼层
回复 8# buley


    楼主高手,答案懂了 ,只几行而已,可是很巧妙诶。话说这个结果是怎么推算出来的呢?经验吗?猜的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-4-28 04:44 , Processed in 0.028501 second(s), 7 queries , Gzip On, Redis On.

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