Low power RTL 设计优化,同等工艺下让你的设计功耗更低!

会议推荐

不容错过的物联网芯片及通信技术研讨会!

来源:EETOP BBS   作者:yaya126

原文:http://bbs.eetop.cn/thread-636337-1-1.html

论坛里面讨论low power RTL前端设计的帖子好像不多,许多大牛的书上来就谈工艺,半导体结构,让我高山仰止,但也只能心向往之(实在有些看不懂)。

工艺的提升带来的收益可能远比RTL深度优化高,如TSMC 40LP vs TSMC 28HPC+, 后者基本上比前者面积小一半,速度快一倍,dynamic power小40~50%,

代价是leakage高3~4倍。在老工艺上如何绞尽脑汁优化设计,可能也很难达到这种效果。

但作为前端RTL designer, 一旦工艺选定,我们只能在自己的一亩三分地里面做到最好,本帖就此抛砖迎玉,结合自己的工作经验讨论下low power RTLdesign, 挖个坑,希望坛子里的大牛一起帮忙填坑。

刚入行做design时,考虑的是Area 和 speed,近些年来,power变成了越来越重要的指标,有时候更是牺牲Area和speed来换取power的收益,毕竟有些领域, 电池容量是很难增大的。

有人做过大体统计,降低功耗的方法和收益大体如下,对于前端RTL 设计,最好用的还是clock gating, 收益最显巨,代价最小,其他方法也能有可观的收益,具体还的依靠具体应用场景分析。

Power 主要消耗在:

1) combinational logic

2) sequential logic

3) memory

4) clock network

下面我将就下面几个方面展开讨论:

1.Improve clock gating efficiency.

a.Block level clock gating.

b.RTL clock gating. (重点)

2.Reduce data toggle rate.

a.FIFO vs PIPE

b.FSM coding style

c.Unnecessary reset.

3.Refine Memory Selection.

a.Area power balance

b.I/F bitwidth selection.

c.Depth selection.

4.Reduce memory accessing

a.Address caching.

5.Reduce logic size

a.Logic sharing.

b.Logic balancing

c.Divider optimization.

d.Reduce pipe line length

e.Hardmacro vs Register

f. Reduce bitwidth

g. Async reset vs non-async-reset.

6. Misunderstanding

1.Improve clock gating efficiency

a. block level clock gating

如果某个模块或者功能可以打开或关闭,且logic相对独立,则可以在这部分logic的时钟上加手动插入一个ICG,用模块是能控制ICG的开关,这样能最大限度的提升gating效率。

1. ICG最好选取驱动能力较大的,以便于驱动足够多的DFF。

2. ICG建议加一个wrapper,这样当需要替换其他工艺时,只需要将wrapper里的instance 换掉。

3. 综合时对此类ICG设置don’t touch

b. RTL clock gating.

Lowpower RTL综合的精髓就是把本该综合在D端的enable信号,综合到CLK端,这样只有enable有效才能释放一个clk使得D端数据传递到Q端。当D超过一定bit数,通常认定>=4bit能节省power, 为了达到这种效果,寄存器的赋值一定是条件赋值,示范代码和电路如下,

Mentor有power_pro能够帮助分析RTL,提取有效的enable,并完成代码的优化,但就我看下来,它优化过的代码可读性非常差,条件有时候也有冗余,导致过多的使能ICG,而且后续如果需要ECO,还需要购买它的formal工具,不然很难再改它的code.

此处我提供一个自己写代码分析的perl脚本,可以用来查所有代码中不符合low power RTL 代码规范的code, designer可以根据它的报告来优化赋值使能条件,已经过实际项目测试。

欢迎大家使用并提意见。(后面会解释为毛要查2d arry, initial和乘法器)

power_check.pl –v –f [filelist] –d [directory] -filter [N]–b –2d –init -mul [top.v]

-v or –verbose   :print verbose log for debug.

-f or –file       : input file list.

-d or –dir       : set searching directory, script will findVerilog file under this directory.

-b or bak       : back up previous result.

-filter [N]       : filter <= N bits register error.

-2d or 2d_array  :report2D register array.

-initial or init   :report initial block

-mul          :report multiplier info

Verfilog file     : input Verilog file

产生结果文件,最重要的power_check.v。

运行时报告:

power check perl script: (登录论坛可下载)

power_check.rar (7.87 KB)

Low power RTL 理想代码结构:

1 always@(posedge clk or negedge rstn) begin

2     if(!rstn)begin

3         Q<= 'h0;

4     end

5     else if (condition_1)begin

6         Q<= D_1;

7     //other condition 2, 3, 4 …

8     else begin

9         Q<= Q;  //better to remove this assignment, then data willbe kept.

10     end

11   end

错误代码的示例, 如果不管在什么情况下,总有D值需要打到Q, 使得即使综合出来ICG, 该ICG也不能关断。错误远不止下面几种,if/else if/else, case/default 等等

1. 没有赋值条件

1 always@(posedge clk) begin //”if-else”hierarchy 0, default is “else” block

2  Q <= D;           //Error: no condition for Dataassignment.

3  end

2 . else 赋值

1 always@(posedge clk or negedge rstn)begin  //hier0

2    If(!rstn)begin                       //hier1 “if” block

3        Q <=’h0;

4    end else begin                      //hier1 “else” block

5        Q<=D;                        //Error: no condition for Dataassignment.

6    end

7  end

3. 多级条件中的else

1 always@(posedge clk or negedge rstn)begin  //hier0

2    If(!rstn)begin                       //hier1 “if” block

3        Q <=’h0;

4    end else if(condition1)begin           //hier1 “else if” block

5        If(condition1_1)begin            //hier2“if”block

6             Q<=D1_1;

7        end else begin                  //hier2“else” block

8           Q<=D1_2;                  //not report error, as it is in “else if”block.

9       end

10     end else begin                   //hier1 “else” block

11         If(conditon2_1) begin         //hier2“if” block

12              Q<=D2_1;

13         end else begin              //hier2“else” block, in hier1 “else” block

14              Q<=D2_2;              //Error: no condition for Data assignment.

15         end

16    end

17    end

4. 下面这个例子不会报错。

1 always@(posedge clk or negedge rstn)begin  //hier0

2    If(!rstn)begin                                //hier1 “if” block

3        Q <=’h0;

4    end else if(condition1) begin     //hire1 “else if” block

5        Q<=Q;                                  //”Q<=Q”ensure ICG insertion

6    end else begin                        //hier1 “else” block

7        Q<=D;                              //Not reportERROR as “Q<=Q” in “else if”.

8    end

9    end

会议推荐

不容错过的物联网芯片及通信技术研讨会!

(免费,10月17日,上海)

2. Reduce data toggle rate

a. FIFO vs PIPE

当数据需要穿过N拍delay后再使用时,我们通常有两种方法来实现, 1是讲数据打N级pipe,一级一级往传。 2是将数据存入FIFO, 到后级需要使用时直接读出来。 两种方式VLD都需要单独传递。

对比PIPE的方式,FIFO的方式有额外地址计算比较的开销,但每个数据只需要读写各一次,不像PIPE,数据需要在整个PIPE中shift一轮,FIFO 方式每个寄存器的toggle rate将大幅下降。 假设数据的toggle rate 位Tr, N级pipe的 toggle 为N*Tr, FIFO 为 Tr。

如果由于FIFO输出数据+后续计算timing不满足,可以考虑缩短一级FIFO,最后一级仍由PIPE输出。

根据我在TSMC 40nm和28nm下PTPX仿真结果分析。(具体数据可以单独找我要)

结论:

FIFOreplace PIPE for power reduction:

when ADDR >=2 bit , DATA should be >=4 bit, DATA 越宽,级数越深,FIFO power 收益越高,但有额外的面积开销。

上面脚本提供命令 power_check.pl -2d -d . 来把代码中所有的 2D array 找出来,有些同学喜欢把PIPE 赋值写成下面的样子

for( i= 1 ; i< N; i ++) begin

if(VLD[N-1])

Array[N] <= Array[N-1] ;    //这个代码虽然是有条件赋值,但如果符合上面的条件,可以考虑换成FIFO.

end

b. FSM code style:

状态机常用编码有3种:

1. one-hot: 如 3'b001->3'b010->3'h100, 状态个数 = 比特位宽一样, 每次状态变化,最多只有两个bit变化。

2. 2进制编码,   如 3'b000->3'b001->3'b010->...,  Nbit 能支持 2exp(N)中状态。

3. 格雷码, 3'b000->3b001->3'b011-> 3'b010-> ... 如果按照顺序变化,每次只有一个bit跳变。

总体来说,one-hot使用bit数较多,power最差,如果状态跳变有一定顺序,采用格雷码编码能降低toggle rate.

40LP下4 bit FSM, 16个状态,从4‘h0 跳转到4'hf’’的状态机, 功耗面积对比结果如下。

即使状态机不能完全按照格雷码编码,把频繁跳转的状态用格雷码编码,也能获得举手之劳的power收益。尽量少用one-hot编码。

FSM

power

area

Gray code

8.697e-06

110.95(best)

One-hot

1.023e-05

166.69

binary

9.984e-06

108.48

c. Unnecessary reset:

对于控制寄存器,清理掉残余状态很多情况下是必要的, 但对于data寄存器,数据残余可以不要复位。

如果只在read_en的条件下把有效的数据写入rdata, 完全没有必要在!read_en的时候复位寄存器,这个做只是白白增加toggle rate.

If(read_en)      rdata <= read_data

Elseif(!read_en)  rdata <= ‘h0;       //Don’t reset rdata to all 0.

如果写了这种语句,即使用power优化工具,或者上面那个脚本,都是没有办法来优化的, 总的来说,寄存器使能调件越精确(打开ICG几率越少), 越有利于power 优化。

会议推荐

不容错过的物联网芯片及通信技术研讨会!

(免费,10月17日,上海)

3. Memory Selection

SRAM的选择有很多讲究,我们需要看throughput, size, width 来决定到底是选1p, 2p, spra 和 1prf,通常情况下,在满足速度要求的情况下,挑选面积小的。 在这里我提一种新的挑选方法,即在速度达到要求的前提下,挑选power, area 性价比最高的。

当我们选的面积最小的为基准时,看面积增加的百分比和power减少的百分比的差值,假设area 和power对性价比评估各占50%的权重,如面积增大10%, 但power 下降20%,则认为性价比变好了,如果只换来5%的power下降,则认为性价比变差了。

当然我们可以调整area/power的权重来改变挑选规则,极端情况下,把area权重设置为100%就是通常下挑面积最小的那种方法。

那么,我们只需要用memory生成工具,将满足尺寸的sram按照不同的rf/sram segment_option  ,MUX,Width, Bits 用脚本全部生成一遍, 用上叙规则挑选最优,有些面积相差不大的sram,power差20~30%.

除了同样存储大小的sram, 位宽扩大一倍,深度减小一半的也可以考虑,如256x10,可以考虑生成128x20,位宽大一倍,不意味着每次读写power大一倍,但读写次数如果减少一半,这样也能带来可观的收益。

另外同样位宽,深度减半的也可以考虑,(这个从我做的实验看,收益不如double位宽的)

总之,挑sram不光考虑面积,可以尝试不同的选择,更多的考虑性价比。

Sram面积可以直接从生成文件里读出,但power需要手工计算:假设standby power 不考虑,只考虑read/write power, 我们可以从生成文件中得到每次读写所需要的power,Pwr, Prd, 然后根据sram使用的特性,比如在一定时间内(周期内),是多少写多少读,乘上单次读写的对应的power,就可以大体估计sram的power.

另外强烈建议在生成的sram 外面加个wrapper, 并手动插入一个ICG,只有在RD或者WR的时候才打开ICG,通常情况下,sram的clock是被gating掉的。

4. Memory Address Caching

Address caching:

当sram使用场景需要对同一地址多次查表时,可以考虑将上一轮读地址存下来,于新地址比较,如果在上次读之后没有对该地址的写操作,且新地址等于寄存的地址,则可以省略该轮读访问。

5. Reduce Logic size

Area大通常意味着power大,站在save power的角度,减少面积,减少逻辑单元,和降低功耗的方向是一致的。

Logic share:

有些逻辑的throughput要求不高,一份逻辑分时进行N次计算,等效于N份逻辑在一定时间内计算一次。复用之后计算总量一样,但静态功耗会降低。当然需要考虑1份逻辑N次计算带来的副作用,计算latency加长是否可以接受。

Multiplier:

乘法器,在这特指变量乘变量,如果是变量乘以常数,综合工具都是综合成加法器,不在考虑范围内。

同等bit数,乘法器比加法器大许多,对于每个乘法器,我们都

1) 需要仔细review它的使用是否必须,

2) 使用的时候位宽是不是可以降低,乘法器位宽严重影响综合面积和timing, 在计算的时候,即使是signed的数,也不要轻易添加N bit 最高位(符号位),建议使用verilog 2001 语法, 用 $signed(A[dw-1:0])* $signed(B[dw-1:0]), 千万别写成 {{(dw){A[dw-1]}}, A[dw-1:0]}*{{(dw){B[dw-1]}}, B[dw-1:0]}, 虽然输出位宽为 2dw。

上面提供脚本 power_check.pl –mul -d . 可以抓代码中所有的乘法器来集中review)

3)乘法器是不是前后组合逻辑很多,造成综合工具为了meet timing而产生一个超级并行(巨大)的组合逻辑(这个在logic balance也会提到),

4)“乘加”逻辑是不是可以转变成“加乘”逻辑, 这里“乘加”指的是A*mul 和B *mul 乘完后寄存后再加,还是(A+B)*mul 后再寄存, 如果在同一拍内,即使写成A*mul+B*mul, 综合工具也会优化成(A+B)*mul, 但建议在代码上体现先加后乘。

下面是4bit与15bbit “乘加” ,“加乘”面积比较, “乘加”面积几乎大一倍

ADD_before_Mul or Mul_before_ADD

Area(um2)

Multiplier number

ADD_MUL =bit4*(bit15+bit15)

543

1

MUL_ADD =bit4*bit15+bit4*bit15

919

2

Divider optimization(N/M):

乘法器通常1拍内完成,但除法器少有能1拍完成的。乘法我们可以直接在代码里面写“*”号,综合工具通常能给我们满意的结果,但除法器,极少数情况下我们直接写“/”,大部分情况我们需要单独inst 除法module.

标准除法器(N和M 都是变量):

基本的设计思路是移位减,如果每个cycle计算被除数1bit, N/M, 我们需要N拍,如果每个cycle 2bit则需要(N+1)/2 拍,这样的除法器面积都不大,但计算latency长。同时EDA公司也提供的design-ware除法器,速度更快,面积也更大。当然还有一种查LUT表的除法器,但我没用过,不好评价

特殊除法器:

1)除数是2的幂次,如2, 4, 8,很多人会想到直接移位,对于被除数是正数来说移位绝对正确,但如果被除数是负数,除法结果收敛到0,移位结果收敛到-1,

如 -5/64=0, -5 == 5B'1-1011, 右移后,变成5b'1-1111,= -1,两者结果不同。

判断高位是都全为1,如A[m,0]>>n, 需要确认A[m,n]的情况

|A[n-1:0] !=1'b0? A[m,n] + 1'b1 : A[m,n];

2)除数是常数,最好为 (2的幂次+/-1), 如5,,7,可以考虑泰勒展开,用2的幂次和来近似。

如下 用最近的2的幂去近似的除,将余数和商迭代知道其和小于除数。 Div/(2^X - K)

step1   Div/2^X = M0 ... R0 if K*M0 + R0 >=2^X - K, to step 2, else M= M0,R=R0+K*M0

step 2  (K*M0+R0)/2 …

如下

100/7 =14 ...2

step 1   100/8 = 12 .. 4    if (12+4)>= 7, to step 2

step 2   (12+4)/8 = 2 ...0 if (2 +0 )<7  .  result = 12 +2 ...2.

3)除数是常数,是不是可以用近似的乘法来代替,比如先计算X= 1024/M, 再用

X*N/1024来还原成N/M. 当然这个除法会有精度损失需要考虑。

网上还有相关文档针对特殊除法器的优化,这个需要具体应用具体分析。

正因为除法器在面积和latency上的差异非常大,特别是长latency的除法器,很容易成为计算逻辑中的瓶颈,别的逻辑都在等着它的结果才能开始后面的计算。因此在选择不同除法器时,需要考虑整个data-path的开销,减少1个cycle的除法计算,是不是能缩短整个path 1 拍,可以节约多少寄存器。

当data-path不关心除法latency的时候,直接选1bit移位减的除法器area和power最优,如果能结果逻辑复用效果更佳。

Attend Mentor low power RTL design and HLS seminar

上午是powerpro 的AE讲它们如何省power,如何评估power, 稍后和大家分享。

就我看来:

Automatic power reduction: RTL is very hard to understand after modification.

power estimation: to get real data, prefer PTPX with fsdb, (saif is not accurate, especially when estimate memory)

Guilded Power estimation: 基本就毛估估了。

不过这可能是我的偏见,看看今年他们有什么更新。

hls_bluebook.pdf (14.29 MB)

mentorpaper_98423.pdf (2.42 MB)

mentorpaper_102112.pdf (1.35 MB)

mentorpaper_94085.pdf (589.09 KB)

(登录论坛可下载)

今天mentor seminar分享的一些资料, 部分资料还没收到,low power RTL design, 工具虽然能帮你查漏,但save power还的有自己基本的理解,并在设计中灵活运用,如果代码写的好,它是没有水平来优化你的code的。

powerpro 虽然功能强大,3大功能,但在我看来,

1. power estimation 不如PTPX, power sign-off还是要ptpx,也许他便宜点。总之power 估计这东西,garbage in garbage out, 要想估的准,输入就的准,前期毛估估,与最终结果随便差30%

2. automatic RTL power optimizaiton: 我是不会让他来改我的code,改了看不懂,做ECO后还要买他的formal工具slec.

3. guiilded RTL power optimization: 可以看看他的手册,白皮书,学习下理念,他提到的"shift register vs circular buffer"理念 和我的“ pipe vs FIFO ”不谋而合,具体操作中,大家还是在自己的工艺下用脚本跑一下比较,看看到底在什么深度和data-width下fifo才有收益。 一般应用,我上面提供的脚本已经能解决大部分问题。

HLS: 如果是low power RTL design, 建议还是不要用,这东西就是给软件人员写硬件code用的,估计很多情况下,你一句下去都不知道底层实现的是什么。 他举例也是 nv 的 tergra 1, 当年这个不就是高功耗的代表,发热感人吗。

如果是为了拉风投,做demo,快速出产品,可以考虑HLS, 这比写code 还是快多了。

会议推荐

不容错过的物联网芯片及通信技术研讨会!

(免费,10月17日,上海)

Reduce pipe-line length:

在写RTL前,我们应该知道最基本的计算单元(*,+,>= 等)的延时和面积,这个数据可以通过对基本计算单元在SDC中约束紧和松的综合得到。在tight的情况下,我们能看到综合工具把逻辑并行展开,面积非常大,也许还不能meet timing。在loose的情况下,逻辑串行都能满足timing要求。两者面积相差3~6倍都不稀奇。

Reduce pipe-line, 要求对基本的组合逻辑delay有基本的认识,合理的排列pipe-line,同时注意关注data-path converge点,看看data-path长短的瓶颈在哪条分支上,压缩关键分支是否能带来整个path的缩短,以及这样带来的好处。

当然预估datapath的延时和面积的影响,这个要求非常高,我自己也难做的很好,一般为了timing容易meet,大家可能都会在设计是留足余量,导致path比理想状态下长不少。但我有一个想法,也许可以帮大家找到最合理的pipe-line length,我准备整个脚本来帮忙实现这个功能。(仅针对算法模块,控制少,计算多)

1.先直接照搬C code, 不考虑timing,把中间计算逻辑RTL写出来,最后输出用寄存器,建议写出参数化的方式,方面后续re-timing.

2.进行tight/loose两轮综合,这样我们得到组合逻辑的最大面积(最小delay)和最小面积(最大delay)。

3.通过最大delay/clock_period, 得到最小的pipe-line length。通过最小delay/clock_peroid,得到最大的pipe-line length

4.用re-timing的方式,从最小pipe-line length开始,调整pipe-line重新综合,不停找面积的拐点,我期待看到的结果是,中间有个面积最小的拐点,或者直到pipe-line length 最大,面积单调递减。

5.面积最小的pipe-length就是理想的结果。

如上图,纵轴Z是面积,X轴是频率, Y轴是PIPE length, 在不同的频率下(不同的截面),不同的pipe面积曲线是图上离散的点,我们求的就是面级最小解。

我们可以用这个结果来指导实践RTL design, 达不到最好可以采用次好,但总比没有准备直接上手要好。

如果脚本准备妥当,只是花几轮综合的时间,我觉得可行性还是有的,反正都是机器跑,不然这种设计全凭经验,没有benchmark来check quality.

我还想是不是还可以用HLS的综合结果来当benchmark,算法c code 去综合,看看catapuls给出来的建议是多少级,再和上叙re-timing循环综合的最优结果比,差多少,如果两者接近,证明HLS的建议可

Reducebit width:

最简单的比如 4 个10 bits数相加,也许就会有人得出需要13bit的结论

C code: F=  A+B+C+D

Wire [10:0] F_pre1 = A[9:0] + B[9:0];

Wire [11:0] F_pre2 = F_pre1 + C[9:0];

Wire [12:0]F     = F_pre2 + D[9:0]; //sum of four10bit only need 12bit result.

特别是有些计算,如果能够通过简单推导或者合并降低位宽,那会既省面积又省power.

Hardmacrovs Register:

Tsmc 40 nm工艺下面,简单对比单个寄存器和sram的大小,

SDFCNQD1BWP    5.2u2  (Min size )

SDFCNQD2BWP    5.9 u2

For 1prf128x36=5458u2, each bit is 1.18u2

Forsparm576x32=12884, each bit is 0.69u2

Forspram 896x48=23515u2, each bit is 0.546u2

通过查手册,知道单次读写的power, 以便在大量数据需要寄存时,分析到底是用hardmaco 还是 DFF.

Logicbalancing:综合工具在时序紧的时候更多的用并行逻辑来减少计算delay, 在时序松的时候用串行逻辑来减少面积,如果我们在写code的时候能把一些不在关键路径上的逻辑拆开,这样能优化面积,同时减少power.

如下图,非关键路径第一拍逻辑多,第2拍逻辑少。

balance后的结构如下:

一个具体实例如下:两个时序很紧的加法器balance后area power的变换。 area power都有下降

Style

Power

area

No-balance

6.491e-06

729.06

Balance

5.618e-06

373.08

当然,如果为了balance 逻辑需要寄存大量的中间结果也是不合适的,上面power没降这么多是因为增加寄存器hold中间结果,这个最好能有工具提供优化提示。

会议推荐

不容错过的物联网芯片及通信技术研讨会!

(免费,10月17日,上海)

(0)

相关推荐

  • 【博文精选】Synplify Pro的RTL视图与Technology视图以及优化分析

    在进行Verilog/VHDL Coding的时候,很多人喜欢先通过检查设计的RTL视图是否符合预期,然后在通过功能仿真和时序仿真来验证设计的功能正确性. 以Lattice Diamond/Radia ...

  • 以太网IP核代码(verilog)

    基本介绍:  千兆位和10G数据包处理(8位和64位数据路径)的以太网相关组件的集合.包括用于处理以太网帧以及IP,UDP和ARP的模块,以及用于构建完整UDP/IP堆栈的组件.包括用于千兆位和10G ...

  • 想去一线大厂做FPGA开发?这些是你该学的知识

    在之前的文章里,我介绍了入门FPGA需要学习的四个主要内容,分别是:RTL编程语言.数字电路相关的基础知识.FPGA开发工具,实验和实践的方法. 入门阶段学习的主要目的,主要是对这个领域有一个初步的了 ...

  • 首发 | 南筑设计 · 融创社区商业下的多业态设计

    WWW.DINZD.COM 我们进入了一个生活方式时代,致力于追求物质.情感和精神的完美统一.天津融创星耀五洲是融汇文化.艺术.生活时尚与科技的新型商业社区,力求通过话题性.体验性.跨界性的场景革命 ...

  • 工艺设计优化对汽车整车材料利用率提升的影响

    随着汽车行业竞争不断加剧,现阶段主要通过技术创新的手段提高产品质量,同时以工艺优化的方式,实现降本增效.本文分析改变成形方式.落料排样.废料再利用.合模工艺.套件成形以及部分冲压件板材选用激拼焊板等工 ...

  • 某下穿道路船槽抗浮设计优化

    一.基本情况 某线路下穿道既有公路全长420m,路基宽度51m.因路面标高低于最高地下水位,为封闭地下水,采用钢筋混凝土U形槽,共分36节下穿既有道路.其中U型槽底板厚度为0.6-1.5m.U形槽采用 ...

  • 有哪些曾经流行的装修,现在却已经淘汰?6个设计建议再考虑下

    原创家物2021-05-07 18:00:00 装修设计有时候也是"快时尚",有很多曾经流行的家居装修,如今已逐渐被淘汰,它们也许是因为实用性太差,也许是因为外观原因,总之长江后浪 ...

  • 高品质论坛精彩回顾 | 王健:高品质供水格局下 水源到水厂设计探讨

    "更优质.更精细.更智慧"高品质饮用水探索与实践研讨会暨<净水技术>2021年学术年会于4月28-30日在上海举办. 研讨会邀请了50余位在高品质供水创新和实践方面的院 ...

  • 景区设计|体验视角下的景区旅游产品策划

    制定旅游开发规划时,要注意发掘旅游地的潜力,体现旅游地的特点,发挥旅游地的优势.基于体验视角,旅游产品策划可以从以下几个方面来考虑: 1.康疗体验 对于现代人来讲,旅游最重要的功能是放松神经.愉悦精神 ...

  • 设计作业技能九:新课程下家庭作业的设计

    作业是学生进行语文实践的有效途径,也是巩固知识和形成能力的重要手段.传统的家庭作业已不能适应新课程的要求.笔者对如何科学.有效地设计语文家庭作业进行了尝试,且略有收获.现介绍如下. 一.家庭作业设计的 ...

  • 琥珀优化三大工艺

    天然血珀中以缅甸血珀最有名,但是其颜色灰暗且杂质较多,因此天然血珀的市场价格很高,所以市场上就会有价格相对低廉的烤色血珀. 烤色工艺技术 所谓烤色,即在特定温压条件下,琥珀表面的有机成分经过氧化作用产 ...

  • 设计作业技能五:在新课标下小学语文作业设计

    作业是为了巩固课堂教学效果而设计的供学生课外进行的练习.它与课堂教学,课外活动一起,构成了完整小学语文教学的巩固和运用.是小学语文教学的重要环节,是提高教学质量的重要途径.但在现实教学中,小学作业负担 ...