FPGA|CPLD|ASICwilliam hill官网
直播中

gah2

9年用户 6经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[资料]

verilog hdl 的疑问

有2个文件
pc.v    : 读指令
id.v    : 译码
pineline    :流水线控制

id.v
{
    ...
    //当前读取的4字节指令
    input    wire[31:0]    inst;     
     
    //流水线控制标志            
    input    wire[8:0]     flg_pineline;     
    ...
     
    //------------------------------------
    //以下用c表达
    //当前指令,假设指令最大长度 12*4=48字节
    unsiged char * cur_pc        = malloc(48);
     
    //下一条指令,假设指令最大长度 12*4=48字节         
    unsiged char * next_pc    = malloc(48);     
     
    //全局变量,如果一条指令读取完成
    //如果10字节的指令,要分3次,
    //期间每次都是 false,最后完成是 true     
    flg_inst_complete;     
     
    //指令总长度            
    inst_tot_len;                             
     
    //本次读取指令的长度(如:10自己指令,
    //前2次为4字节,最后一次读取的指令
    //长度为2字节,另外2字节为下一指令的)
    inst_cur_len;     
                             
    //指令剩余长度
    inst_left_len;
     
    //cur_pc[cur_pos]                        
    int cur_pos    ;                             
     
    ........
    译码分析
    .........
     
    //最后
    for(i=inst_cur_len;i>0; i--)
    {
        cur_pc[cur_pos]    = inst[i];
        cur_pos++;
    }
     
    //读取12字节,有10字节是当前指令,
    //2字节为下一条指令     
    if(flg_inst_complete == true)
    {
        cur_pos = 0;
         
        for(i=(32 - inst_cur_len);i>0; i--)
        {
            next_pc[cur_pos]    = inst[i];
            cur_pos++;
        }
    }
    //-----------------------------------
}

问题:
1)以上c逻辑如果用 verilog hdl 表达,该如何写?
2)全局变量的初始值(flg_inst_complete=true,
    inst_len_dword_cnt=0)该怎样赋值?
    在c里简单,main函数里赋值即可;
    但在verilog hdl里,该怎样做?
已退回1积分

回帖(2)

yuelongfeis

2015-10-11 13:27:21
c是顺序执行,v是并行执行,而且你要定义寄存器类型,这个在v里面就是组合逻辑,但是v最适合的是做时序的
举报

mop

2015-10-15 16:45:25
1) 先將你的Loop內的程序拆解成組合邏輯和序向邏輯,通常加算移位的部分是組合,邏輯式是序向,須配合FSM,建立你的邏輯狀態

2) 用FSM轉態時候就可以賦予值,注意建立FSM是很重要的過程,確保你時序正確
举报

更多回帖

发帖
×
20
完善资料,
赚取积分